【问题标题】:How to look for a particular property in an JSON and retrieve a corresponding property [duplicate]如何在 JSON 中查找特定属性并检索相应的属性 [重复]
【发布时间】:2013-08-16 05:44:58
【问题描述】:

我正在尝试访问对象的特定属性,特别是以下代码中的“levelId”。

这是我目前所拥有的

FIDDLE

代码是这样的

$(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);
});

上面的代码只有在 json_data -> data -> attr 中才能检索到levelId。但是,levelId 可能嵌套在 json_data -> data -> children -> attr 中。我如何遍历这个对象来获取levelId,即使它嵌套在内部深处。

【问题讨论】:

  • 您想获取与特定 levelId 对应的 fname 还是只想要所有 levelId(如 [1,2,3,4])?

标签: javascript jquery json


【解决方案1】:

使用嵌套循环:

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
        }
    }
}

【讨论】:

  • 这个是不是只访问children的levelId?
  • 是的,这就是你要求的。
  • 不,这不是我要求的。请重新阅读问题:上面的代码只有在 json_data -> data -> attr 中才能检索 levelId。但是,levelId 可能嵌套在 json_data -> data -> children -> attr 中。即使它嵌套在内部深处,我如何遍历该对象以获取 levelId。
  • 这就是它的作用。它遍历孩子,如果它在那里,则获取 levelId。我刚刚更新了代码来处理一些children 数组只包含字符串而不是对象的事实。
  • 所以,如果 levelId 存在于 json_data -> data -> attr 以及 json_data -> data -> children -> attr 中,我应该分别处理它们吗?
猜你喜欢
  • 2021-08-27
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 2011-08-03
  • 1970-01-01
  • 2020-06-15
相关资源
最近更新 更多