-1

我得到了一些嵌套的 JSON,如下所示:

[
{"ID": 1,
 "Name": "This is a Catogory, i don´t need them",
 "Items": [
          {"ID": 2,
           "Name": "Some String here",
           "Items": [{
               "ID": 2,
               "Name": "Some String here",
                ... etc ...
          },
          },
          {"ID": 5,
           "Name": "Some String here"
          },
          {"ID": 3,
           "Name": "Some String here"
          },
          {"ID": 4,
           "Name": "Some String here"
          }
          ]
},
...
]

现在我需要将所有带有名称和 ID 的子项保存到字典中,以 ID 作为键。

我认为这应该与递归方法有关。不知道具体如何,我只从子项目中获取所有项目或仅第一个项目:-/
对于一些简单的代码,一个好的链接或其他东西,我将不胜感激。

对不起,我认为这还不够清楚。子项也可以有子项!
我对嵌套结构没有影响。

4

1 回答 1

1

如果对象的深度未知,您将需要一个递归函数来提取所需的数据。

var test = [
    {
        "ID": 1,
        "Name": "This is a Catogory, i don´t need them",
        "Items": [
            {
                "ID": 2,
                "Name": "Some String here",
                "Items": [
                    {
                        "ID": 12,
                        "Name": "Some String here"
                    },
                    {
                        "ID": 13,
                        "Name": "Some String here"
                    }
                ]
            },
            {
                "ID": 5,
                "Name": "Some String here"
            },
            {
                "ID": 3,
                "Name": "Some String here"
            },
            {
                "ID": 4,
                "Name": "Some String here"
            }
        ]
    },
    {
        "ID": 1,
        "Name": "This is a Catogory, i don´t need them",
        "Items": [
            {
                "ID": 7,
                "Name": "Some String here"
            },
            {
                "ID": 8,
                "Name": "Some String here"
            },
            {
                "ID": 9,
                "Name": "Some String here"
            },
            {
                "ID": 10,
                "Name": "Some String here"
            }
        ]
    }
]

var kvp = [];
function parseItems(startArray)
{
    console.log(startArray);
    if(startArray === undefined)
        return;
    for (var i = 0, l = startArray.length; i < l; i++) {
        if(startArray[i].Items === undefined)
                continue;
        for (var j = 0, k = startArray[i].Items.length; j < k; j++) {
            kvp[startArray[i].Items[j].ID] = startArray[i].Items[j].Name;
            parseItems(startArray[i].Items);
        }
    }
}

console.log(kvp);

这将打印出如下内容:

[
    2: "Some String here",
    3: "Some String here",
    4: "Some String here",
    5: "Some String here",
    7: "Some String here",
    8: "Some String here",
    9: "Some String here",
    10: "Some String here",
    12: "Some String here",
    13: "Some String here"
]

是一个jsfiddle示例

于 2013-06-06T17:36:38.363 回答