我以前收集过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”
答案 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 );
}
我建议像这段代码一样(nodes
和node
变量)来引用嵌套对象,而不是data.nodes[i]
之类的东西。更容易跟踪,也可以更有效率(虽然在这个简单的情况下它没有任何不同)。