Javascript 如何在嵌套JSON中导航
我有嵌套的JSON对象,比如Javascript 如何在嵌套JSON中导航,javascript,json,Javascript,Json,我有嵌套的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": tr
{"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"]
}
]
}}}}
我需要获取事件数组并对其进行解析。但我不知道在事件发生之前,细胞里会有什么,以及它们将如何发生。如何使用此结构?如果结构已知: 假设您在一个名为input的字符串中包含上述内容(并且JSON是有效的): 作为警告,IE的早期版本没有JSON.parse,因此需要使用一个框架 如果结构未知:
//查找_事件键
var tmp=input.substr(input.indexOf(“\u事件”))
//获取最大数组内容。
tmp=tmp.substring(tmp.indexOf(“[”),tmp.indexOf(“])+1);
//现在我们必须搜索数组
var len=tmp.长度;
var计数=0;
对于(变量i=0;i
我发现,在这种情况下,最简单的方法是转到,粘贴json作为变量:
var json = {"baseball": ... etc.
console.log(json);
然后使用Chrome,“查看”->“开发人员”->“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加载到变量中时遇到问题,则需要解析通过AJAX调用检索到的字符串
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.
});
这是一个正在工作的JSFIDLE:(注意:它输出到控制台,所以你需要在chrome中按住Ctrl+Shift+J/Cmnd+Option+I,或者在Firefox中打开firebug,然后重新运行)“但我不知道在事件发生之前单元格中会有什么,以及它们将如何运行。”我如何使用答案?问题是我不知道结构是什么,我只需要递归地去划分事件,然后解析已经存在的数据数组。因此,我不知道如何对此任务进行递归=)我恐怕这是一个很好的例子,说明何时使用XML而不是JSON,因为您可以使用XPath来处理类似的事情。@Gabi Purcaru它是JSON!!!试着在网站上验证一下,你就可以投票了,哇@Bakudan在OP编辑它之前不是这样的。我添加了键盘快捷键以获取mac上的web inspector。如果我发送“
members
”作为参数,它会显示超过了最大堆栈大小。
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.
});