我嵌套了JSON对象,如
{"baseball":
{"mlb":
{"regular":
{"_events": [{"start_time": "2011-07-31 17:35", "lines":
[{"comment": "", "coeff": "2.35", "title": "2", "old_coeff": "2.35", "is_main": true},
{"comment": "", "coeff": "1.59", "title": "2", "old_coeff": "1.59", "is_main": true},
{"comment": "", "coeff": "1.59", "title": "2", "old_coeff": "1.59", "is_main": true},
{"comment": "", "coeff": "2.35", "title": "2", "old_coeff": "2.35", "is_main": true}],
"members": ["atlanta", "florida"]
}
]
}}}}
我需要获取_events数组并解析它。但我不知道_events之前会在细胞中发生什么,以及它们将如何发展。我如何使用这种结构?
答案 0 :(得分:15)
function recursiveGetProperty(obj, lookup, callback) {
for (property in obj) {
if (property == lookup) {
callback(obj[property]);
} else if (obj[property] instanceof Object) {
recursiveGetProperty(obj[property], lookup, callback);
}
}
}
就这样使用它:
recursiveGetProperty(yourObject, '_events', function(obj) {
// do something with it.
});
这是一个有效的jsFiddle:http://jsfiddle.net/ErHng/( note :它输出到控制台,所以你需要 Ctrl + Shift + J / Cmnd +选项+我在chrome中或在Firefox中打开firebug,然后重新运行它)
答案 1 :(得分:12)
假设您在名为input的字符串中具有上述内容(并且JSON有效):
var obj = JSON.parse(input) // converts it to a JS native object.
// you can descend into the new object this way:
var obj.baseball.mlb.regular._events
作为警告,早期版本的IE没有JSON.parse,所以你需要使用一个框架。
// find the _events key
var tmp = input.substr(input.indexOf("_events"))
// grab the maximum array contents.
tmp = tmp.substring( tmp.indexOf( "[" ), tmp.indexOf( "]" ) + 1 );
// now we have to search the array
var len = tmp.length;
var count = 0;
for( var i = 0; i < len; i++ )
{
var chr = tmp.charAt(i)
// every time an array opens, increment
if( chr == '[' ) count++;
// every time one closes decrement
else if( chr == ']' ) count--;
// if all arrays are closed, you have a complete set
if( count == 0 ) break;
}
var events = JSON.parse( tmp.substr( 0, i + 1 ) );
答案 2 :(得分:4)
我发现在这种情况下最简单的方法是转到JSFiddle,将json粘贴为变量:
var json = {"baseball": ... etc.
console.log(json);
然后使用Chrome,“查看” - &gt; “开发人员” - &gt; “Javascript控制台”开始试验数据结构的外观,以便构建解析功能。
然后开始尝试结构。例如
console.log(json.baseball.mlb.regular._events);
或者如果你打开JQuery:
$.each(json.baseball.mlb.regular._events, function(i, item){
$.each(item.lines,function(i,line){
console.log(line.coeff);
});
});
如果您在将此JSON实际加载到变量中时遇到问题,则需要JSON.parse通过我怀疑的AJAX调用检索到的字符串。
答案 3 :(得分:0)
我一直在寻找类似的问题,所以我发现了一个库JsonQ,它是最好的东西,可以全部更新密钥。相信我,我发现它非常有用