找到键值的JSON路径

时间:2013-09-12 07:54:54

标签: javascript json jsonpath

jSon = {
        "id":"node1",
        "name":"Languages",
        "rel":"",
        "children":1,
        "step":1,
        "path":1,
        "nodes":[
            {
                "id":"node2",
                "name":"Java",
                "rel":"Pure Object Oriented Prog",
                "children":1,
                "step":2,
                "path":2,
                "nodes":[
                    {
                        "id":"node3",
                        "name":"C#",
                        "rel":"Framework",
                        "children":0,
                        "step":3,
                        "path":3,
                        "nodes":[]
                    },{
                        "id":"node4",
                        "name":"C++",
                        "rel":"OOPS",
                        "children":0,
                        "step":3,
                        "path":4,
                        "nodes":[]
                    }]
            }]
    };

对于上述结构,我如何获得id(key)= node3(value)

的路径

(即)jSon.nodes[0].nodes[1].id

这样我就可以推送新的对象(即)jSon.nodes[0].nodes.push(newjSon);

或者是否有任何其他方法可以在此结构的特定位置添加新对象... 请推荐一些javascript代码..没有jQuery

1 个答案:

答案 0 :(得分:0)

var somethingElse = "data_you_want_to_push"; // not in JSON
var myObject = JSON.parse(jSon);

myObject.nodes.forEach ( function(singleNodeLevel1){
   singleNodeLevel1.nodes.push(somethingElse);
});

jSon = JSON.stringify(myObject);

如果需要,你可以添加计数器并在forEach循环中增加它,或者只使用

if (singleNodeLevel1.id === "something") singleNodeLevel1.nodes.push(somethingElse);

这是没有JQuery,但需要在浏览器中支持ECMAScript5,IE8及更早版本不支持它,但如果您的浏览器不支持,可以为它添加“垫片”