2010-05-07 5 views
0
var records = JSON.parse(JsonString); 

for(var x=0;x<records.result.length;x++) 
{ 
    var record = records.result[x]; 
    ht_text+="<b><p>"+(x+1)+" " 
    +record.EMPID+" " 
    +record.LOCNAME+" " 
    +record.DEPTNAME+" " 
    +record.CUSTNAME 
    +"<br/><br/><div class='slide'>" 
    +record.REPORT 
    +"</div></p></b><br/>"; 
} 

Приведенный выше код отлично работает, когда JsonString содержит массив объектов, но не работает для одного объекта. результат не идентифицируется как массив! Не так ли?проблема разбора JSON Strings

http://pastebin.com/hgyWw5hd

ответ

1

результат не является массивом. Вы видите квадратные скобки в своем JSON? нет, ты не. он не содержит никаких массивов.

{"result": {"ID":"30","EMPID":"1210308550","CUSTID":"1003","STATUS":"2","DATEREPORTED":"1273234502","REPORT":"this is one more report!","NAME":"Sandeep Savarla","CUSTNAME":"Collateral","LOCID":"4","LOCNAME":"Vijayawada","DEPTNAME":"SALES"}} 

Можете ли вы показать мне, что ваш «действительный» json выглядит, когда работает функция выше?

+0

Он работает для этого .. http://pastebin.com/SeWKedyU – blacktooth

+0

Он работает для этого, потому что ** является ** массивом. Если это не массив, вы не можете его перебирать. – SLaks

+0

Изобразительное. Я получил спасибо.. :) – blacktooth

0

Ваш код перебирает records.result, как если бы это был массив.
Поскольку это не массив, ваш код не работает.

Это простое решение, чтобы заставить его в массив, например:

var array = 'length' in records.result ? records.result : [ records.result ]; 

for(var x = 0; x < array.length; x++) { 
    var record = array[x]; 
    ... 
0

В коде result это объект, а не массив. Оберните это значение в квадратные скобки, чтобы сделать это массив:

{"result": [{"ID":"30","EMPID":"1210308550","CUSTID":"1003","STATUS":"2","DATEREPORTED":"1273234502","REPORT":"this is one more report!","NAME":"Sandeep Savarla","CUSTNAME":"Collateral","LOCID":"4","LOCNAME":"Vijayawada","DEPTNAME":"SALES"}]} 
1

Просто убедитесь, что это массив, прежде чем перебирать

if ('undefined' == typeof records.result.length) 
{ 
    records.result = [records.result]; 
}