0

オブジェクトの特定のプロパティ、具体的には次のコードの「levelId」にアクセスしようとしています。

これは私がこれまでに持っているものです

フィドル

コードは次のようになります

$(document).ready(function(){

    var jsonList = {
        "json_data": {
            "data": [
                {
                    "data": "A node",
                    "metadata": {
                        "id": "23"
                    },
                    "children": [
                        "Child 1",
                        "A Child 2"
                    ]
                },
                {
                    "attr": {
                        "id": "li.node.id1",
                        "levelId": "3",
                        "fmnName": "Ragini"
                    },
                    "data": {
                        "title": "Long format demo",
                        "attr": {
                            "href": "#"
                        }
                    },
                    "children": [
                        {
                            "data": {
                                "title": "HQ 50 CORPS"
                            },
                            "attr": {
                                "id": 102,
                                "parentId": 101,
                                "fmnId": 194,
                                "fmnName": "PIVOT CORPS",
                                "levelId": 1,
                                "name": "HQ 50 CORPS ",
                                "isHq": "\u0000",
                                "susNum": "0415009A",
                                "modType": "Plain",
                                "seniorityId": 1,
                                "wePeNum": "HQ-38 WE 4001/1946/8 (3 DIV)",
                                "reliefId": 0,
                                "targetReliefId": 0,
                                "groupId": 0,
                                "realOrbatDtlId": 0,
                                "imgName": "10",
                                "overlayId": "0415009A",
                                "symbolCode": "1001001",
                                "locationName": "BHATINDA",
                                "nrsName": "BHATINDA"
                            },
                            "state": "open"
                        }
                    ]
                },
                {
                    "attr": {
                        "id": "li.node.id1",
                        "levelId": "3",
                        "fmnName": "Rag"
                    },
                    "data": {
                        "title": "Long format demo",
                        "attr": {
                            "href": "#"
                        }
                    }
                },
                {
                    "attr": {
                        "id": "li.node.id1",
                        "levelId": "4",
                        "name": "Skyrbe"
                    },
                    "data": {
                        "title": "Long format demo",
                        "attr": {
                            "href": "#"
                        }
                    }
                }
            ]
        }
    }
    console.log(JSON.stringify(jsonList,null,4));
    var newObject = jsonList.json_data.data;
    var listItems= "";

    $form = $("<form></form>");
    $('#form_container').append($form);

    var $selectContainer = $("<select id=\"selectId\" name=\"selectName\" />");

    for (var i = 0; i < jsonList.json_data.data.length; i++)
    {
        if(jsonList.json_data.data[i].hasOwnProperty("attr") && jsonList.json_data.data[i].attr.levelId == 3)
        {
            listItems+= "<option value='" + jsonList.json_data.data[i].attr.fmnName + "'>" + jsonList.json_data.data[i].attr.fmnName + "</option>";
        }
    }
    $($selectContainer).html(listItems);
    $($form).append($selectContainer);
});

上記のコードはlevelId、json_data -> data -> attr にある場合にのみ取得できます。ただし、levelId は json_data -> data -> children -> attr 内にネストされる場合があります。levelIdこのオブジェクトが奥深くネストされている場合でも、このオブジェクトを反復処理してフェッチするにはどうすればよいですか。

4

1 に答える 1

0

ネストされたループを使用します。

var data = jsonList.json_data.data;
for (var i = 0; i < data.length; i++) {
    var children = data[i].children;
    if (typeof children == 'Object') {
        for (var j = 0; j < children.length; j++) {
            var levelid = children[j].attr.levelId;
            // Do something with this child's levelid
        }
    }
}
于 2013-08-16T05:52:54.630 に答える