JSON不会解析

时间:2013-04-11 23:14:04

标签: jquery ajax json

我以前收集过JSON响应但是这个特殊的响应无论我使用什么策略都无法获取对象!

我的JSON:

  

{nodes:[{title:“test”},{title:“test2”},{

     

标题:“test3”},{

     

标题:“test4”}]};

我的Js:

 $.post('http://mysite.com/some.php', data,  function (data) {


  for (var i=0, len=data.length; i < len; i++) {


      console.log(data.nodes[i].title);


};

});

我将整个DATA作为JSON获得并且工作正常但我无法解析内部对象的解析,我应该如何制定它?我也试过用“FOR”而不是“EACH”

2 个答案:

答案 0 :(得分:1)

这些编号的键表明节点容器应该是一个数组,而不是一个对象

答案 1 :(得分:0)

我同意@KaeVerens,这是(或者是)结构严重的JSON。除了不是数组的数组外,还有一个你似乎不需要的额外级别的对象。如果你正在生成JSON,那么如果是这样的话会更有意义:

{
    "nodes": [
        { "title": "test", "field2": "test2" },
        { "title": "test3", "field2": "test4" }
    ]
}

好的,现在更新您的JSON数据看起来更像这样。但是现在你发布的内容根本就不是JSON!它是一个JavaScript对象,可以在控制台或测试代码中使用,但它不会传递JSON validator。属性名称不应该引用,最后有一个;。它应该看起来像:

{
    "nodes": [
        { "title": "test" },
        { "title": "test2" },
        { "title": "test3" },
        { "title": "test4" }
    ]
}

(间距和缩进并不重要;为了清楚起见,我只是将其格式化了。)

无论如何,修复后,此代码可以正常处理当前数据:

$.each( data.nodes, function( index, node ) {    
    console.log( node.title );
});

如果您检查实际for数组的长度而不是检查不存在的nodes,那么data.length循环将正常工作:

var nodes = data.nodes;
for( var i = 0, len = nodes.length;  i < len;  i++ ) {
    var node = nodes[i];
    console.log( node.title );
}

我建议像这段代码一样(nodesnode变量)来引用嵌套对象,而不是data.nodes[i]之类的东西。更容易跟踪,也可以更有效率(虽然在这个简单的情况下它没有任何不同)。