Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在嵌套JSON中导航_Javascript_Json - Fatal编程技术网

Javascript 如何在嵌套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

我有嵌套的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"]
                                 }
                                  ]
                                   }}}}

我需要获取事件数组并对其进行解析。但我不知道在事件发生之前,细胞里会有什么,以及它们将如何发生。如何使用此结构?

如果结构已知: 假设您在一个名为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.
});