2010-08-31 8 views
0

Использование 1.4.1 против Android под Windows 7. У меня есть веб-сервис, являющийся доступ из приложения Titanium, служба возвращает JSON как это:Почему Appellerator Titanium Mobile не анализирует этот JSON?

{ 
    "VFPData": { 
     "rows": [ 
      { 
       "address1": "Orion House", 
       "address2": "Orion Way", 
       "address3": "Kettering", 
       "address4": "Northants", 
       "comp_name": "Orion Vehicles Leasing", 
       "contid": 1, 
       "email": "", 
       "email2": "", 
       "fax": "", 
       "firstname": "David John", 
       "lastname": "Sear", 
       "mobile": "", 
       "phone1": "", 
       "phone2": "", 
       "postcode": "NN15 6PE" 
      }, 
      { 
       "address1": "Unit 20 Acton Business Park", 
       "address2": "Acton Lane", 
       "address3": "London", 
       "address4": "", 
       "comp_name": "Orion Vehicles Limited", 
       "contid": 2, 
       "email": "[email protected]", 
       "email2": "", 
       "fax": "", 
       "firstname": "Mark", 
       "lastname": "Johnson", 
       "mobile": "0888 566 67879", 
       "phone1": "0208 209 1359", 
       "phone2": "", 
       "postcode": "NW10 7NH" 
      } 
     ] 
    } 
} 

Однако ни одна комбинация из Eval или JSON.parse будет возвращать действительный результат - например:

var contacts = JSON.parse(this.responseText); 
alert(contacts.length); 

Это покажет диалоговое окно с предупреждением, в котором ничего нет. Титановые вызовы HTTPClient работают нормально, так как я могу

Ti.debug(this.responseText) 

без проблем.

Это JSON также проверяет правильность, например, на jsonlint.com.

ответ

2

JSON выглядит прекрасно, и разбирает хорошо ... но это линия:

alert(contacts.length); 

единственная часть, которая заставляет вас верить в это не работает? Поскольку вы не можете получить длину объекта (VFPData) ... вы получите undefined/null, произошел ли синтаксический анализ или нет. Лучшим тестом является:

alert(contacts.VFPData.rows.length); 

... так как вы знаете, что строки - это массив. Или:

alert(contacts); 

Который должен сообщить это объект (если разобран) или нуль/не определено иначе.