1

我有一个复杂的 JSON 对象,我想遍历这个 JSON 并向它们添加更多属性。

这是我的 JSON 对象示例。

Object {root: Object}
      root: Object
          entity_children: Array[1]
              0: Object
                  entity_children: Array[1]
                     0: Object
                         entity_children: Array[10]
                            0: Object
                            1: Object
                            2: Object
                            3: Object
                         entity_id: "00145E5BB2641EE284F811A7907757A3"
                         entity_name: "Functional Areas"
                         entity_type: ""
    .....

所以基本上,我的 JSON 对象具有属性“entity_id”、“entity_name”、“entity_type”和“entity_children”。

“entity_children”可能包含里面的对象列表。我怎样才能穿越到每个元素。我已经尝试过 hasOwnProperty('entity_children') 但它只经历了 1 个级别。

这是我的原始 JSON

{"root":   
    {"entity_id":"00145E5BB8C21EE286A007464A64508C",
     "entity_name":"TP_GTPAPI_TEST_BASE_ACC",
     "entity_type":"",
     "entity_children":
          [{"entity_id":"00145E5BB8C21EE286A007464A66508C",
            "entity_name":"TEST_CATALOG_GTPAPI",
            "entity_type":"",
            "entity_children":
                [{"entity_id":"00145E5BB8C21EE286A007464A66708C",
                  "entity_name":"Functional Areas",
                  "entity_type":"",
                  "entity_children":
                         [{"entity_id":"00145E5BB8C21EE286A007464A66908C",
                ......

请帮忙。

4

1 回答 1

0

如果我理解正确,您的对象中有 children 属性,它是相同类型对象的数组。这使它成为一个分层对象。您将需要迭代和递归才能正确遍历所有对象。看一下以下同时具有迭代和递归的代码。var data = { 根:{ a:“1”,b:“1”,c:“1”,d:[{ a:“1.1”,b:“1.1”,c:“1.1”,d:[ { a:“1.1.1”,b:“1.1.1”,c:“1.1.1”,d:[

                {
                    a: "1.1.1.1",
                    b: "1.1.1.1",
                    c: "1.1.1.1",
                    d: "1.1.1.1"
                }]


            }]
        }, {
            a: "1.2",
            b: "1.2",
            c: "1.2",
            d: "1.2"
        },

        ]
    }
};

function loop(obj) {
    for (var i in obj) {
        if (obj[i].d != null) {
            loop(obj[i].d);
            alert(obj[i].a);
        }
    }
}

function travel() {
    loop(data.root.d);
}

JsFiddle

于 2013-06-25T10:00:49.677 回答