如何使用jQuery读取多对象JSON字符串

时间:2012-10-31 22:12:30

标签: jquery arrays json

挑战: 如何阅读/解析以下json:

> {"d":"{\"NewDataSet\":{\"Table\":{\"LICENSE_PLATE\":\"PLATE
> 1\",\"PARKING_LOCATION\":\"1001\",\"START_TIME\":\"05:05:00\"}}}"}

尝试方法:

var objNDS = jQuery.parseJSON(e.d); //where e.d is the above returned json
var objTbl = objNDS.NewDataSet.Table;
var tblARR = [];
$.each(objTbl, function (i, val) {
  tblARR.push([val.LICENSE_PLATE, val.PARKING_LOCATION, val.START_TIME]);
});

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

如图所示,您的Table不是列表。使用$.each将迭代其键/值对,因此您将拥有:

i                 val
LICENSE_PLATE     PLATE1
PARKING_LOCATION  1001
START_TIME        05:05:00

可能你输入错了,你的意思实际上是:

...\"Table\":[{\"LICENSE_PLATE\":...}, {\"LICENSE_PLATE\":...}]...

如果输入正确,并且Table应该只有一个值,请不要使用each并直接查询objTbl

tblARR.push([objTbl.LICENSE_PLATE, objTbl.PARKING_LOCATION, objTbl.START_TIME]);

更新:如果两个表单都可以显示,只测试objTbl是否为数组,如果不是,请将其包装(理想情况下,您的服务器应该将此数据标准化)。然后您的原始代码将按原样运行:

if ( !(objTbl instanceof Array) )
    objTbs = [objTbl];
$.each(objTbl, function(i, val) {
    tblARR.push([val.LICENSE_PLATE, val.PARKING_LOCATION, val.START_TIME]);
});

答案 1 :(得分:0)

我试图解释你想要完成的事情并将JS小提琴实现组合在一起。请注意,我必须更改“e”变量的格式。

var e = {"d":"{\"NewDataSet\":{\"Table\":[{\"Plate\":{\"LICENSE_PLATE\":\"PLATE 1\",\"PARKING_LOCATION\":\"1001\",\"START_TIME\":\"05:05:00\"}}, {\"Plate\": {\"LICENSE_PLATE\":\"PLATE 1\",\"PARKING_LOCATION\":\"1001\",\"START_TIME\":\"05:05:00\"}}]}}"};

然后循环使用常规for循环。

链接是: http://jsfiddle.net/Dracorat/EFcjA/10/