0

我以前收集过 JSON 响应,但无论我使用什么策略,我都无法从中获取对象!

我的 JSON:

{节点:[{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);


};

});

我将整个数据作为 JSON 获取,并且工作正常,但我无法解析其中的对象,我应该如何制定它?我也尝试过使用“FOR”而不是“EACH”

4

2 回答 2

1

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

于 2013-04-11T23:21:18.613 回答
0

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

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

好的,现在更新您的 JSON 数据看起来更像这样。但是现在您发布的内容根本不是有效的 JSON!它是一个可以在控制台或测试代码中工作的 JavaScript 对象,但它不会通过JSON 验证器。属性名称未按应有的方式引用,并且;末尾有 a。它应该看起来像:

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

(间距和缩进无关紧要;为了清楚起见,我只是以这种方式格式化它。)

无论如何,修复后,此代码可以在您当前的数据上正常工作:

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

如果您检查实际数组for的长度而不是检查哪个不存在,您的循环将正常工作:nodesdata.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]. 跟踪起来要容易得多,而且效率也更高(尽管在这种简单的情况下并没有什么不同)。

于 2013-04-11T23:29:48.630 回答