0

是否可以遍历所有节点并从未预先确定级别的复杂json中找到想要的字段

{
    "_index": "test",
    "_type": "news",
    "_source": {
        "partnerName": "propertyFile 9",
        "relatedSources": "null",
        "entityCount": "50",
        "Categories": {
            "Types": {
                "Events": [{
                    "count": 1,
                    "term": "Time",
                    "Time": [{
                        "term": "Dec 9",
                        "Dec_9": [{
                            "count": 1,
                            "term": "2012"
                        }]
                        }]
                    }, {
                    "count": 4,
                    "term": "News",
                    "News": [{
                        "term": "Germany",
                        "Germany": [{
                            "count": 1,
                            "term": "Election"
                        }],
                        "currency": "Euro (EUR)"
                    }, {
                        "term": "Egypt",
                        "Egypt": [{
                            "count": 1,
                            "term": "Revolution"
                        }]
                        }]
                    }]
                }
        }
    }
}

我可以进入第一级,如果第一级中不存在字段名称,我该如何进入第二级。我就是这样开始的。http://jsfiddle.net/W8qhA/1/

4

3 回答 3

1

我创建了一个函数,该函数将作用于您呈现的结构的对象。如果有多个同名的键,它将简单地返回它遇到的第一个键。

var findDeepKey = function(obj, key){
    var results = [];

    if (typeof obj !== 'object') return null;

    for (var k in obj) {
        if (k === key) return obj[k];
    }

    for (var k in obj) {
        if (typeof obj[k] === 'object') {
            if (obj[k].length) {
                for (var i = 0, il = obj[k].length; i < il; i++) {
                    results.push(findDeepKey(obj[k][i], key));
                }
            } else {
                for (var kk in obj[k]) {
                    if (kk === key) return obj[k][kk];
                    results.push(findDeepKey(obj[k][kk], key));
                }
            }
        }
    }

    for (var i = 0, il = results.length; i < il; i++) {
        if (results[i] !== null) return results[i];
    }

    return null;
};

看演示

于 2012-07-02T05:59:52.363 回答
1

我希望这能解决你的问题。有一些功能,也有一点解释。希望对您有所帮助。 使用 JavaScript 遍历 JSON 对象树的所有节点

于 2012-07-02T05:44:27.537 回答
0

您可以使用http://james.newtonking.com/projects/json-net.aspx

于 2012-07-02T06:24:59.637 回答