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: ""
    .....

基本的に、プロパティ「entity_id」、「entity_name」、「entity_type」、および「entity_children」を持つ JSON オブジェクトがあります。

「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 = { root: { 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 に答える