簡體   English   中英

如何遍歷對象/數組中的項目,並構建嵌套的JSON?

[英]How to iterate over items in object/array, and build a nested JSON?

我正在處理一些JSON數據,我需要從一個對象中獲取數據,並構建一個JSON對象。

編輯:生成的JSON與D3.js圖表​​庫一起使用,因此出現了一個奇怪的問題(顯然是不贊成投票)

我從API返回的數據如下所示:

var data = [
    [
        {"id": 1, "key1":"value1", "key2":"value2", "key3":"value3"},
        {"id": 2, "key1":"value1", "key2":"value2", "key3":"value3"},
        {"id": 3, "key1":"value1", "key2":"value2", "key3":"value3"},
        {"id": 4, "key1":"value1", "key2":"value2", "key3":"value3"},
        {"id": 5, "key1":"value1", "key2":"value2", "key3":"value3"},
        {"id": 6, "key1":"value1", "key2":"value2", "key3":"value3"}
    ]
];

我需要我的JSON將每個對象嵌套在上一個對象中,如下所示:

{
    "name" : "1",
    "children" : [
    {
        "name" : "2",
        "children" : [
            {
                "name" : "3",
                "children" : [
                    {
                        "name" : "4",
                        "children" : [
                            {
                                "name" : "5",
                                "children" : [
                                    {
                                        "name" : "6",
                                        "children" : [ ]
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }]
}

為了說明起見,我只停在6點-我需要可以與N個對象配合使用的東西。 目前,我正在使用_.each遍歷data對象,但無法弄清楚如何進行嵌套。

任何幫助都會很棒-謝謝!

 var data = [ [{ "id": 1, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 2, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 3, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 4, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 5, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 6, "key1": "value1", "key2": "value2", "key3": "value3" }] ]; var r = (function rec(d, o, i) { if (i == -1) return o; var t = {}; t.name = d[i].id; t.children = []; t.children.push(o); return rec(d, t, --i); })(data[0], {}, data[0].length - 1); document.write('<pre>' + JSON.stringify(r, 0, 2) + '</pre>'); 

這就是我想出的。 @isvforall快了一點,但我更喜歡我的。 ;)

 var data = [ [{ "id": 1, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 2, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 3, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 4, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 5, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 6, "key1": "value1", "key2": "value2", "key3": "value3" }] ]; var result = (function buildTree(input, index) { if (index >= input.length) return []; return [ { name: input[index].id, children: buildTree(input, index + 1) } ]; })(data[0], 0); document.write('<pre>' + JSON.stringify(result, 0, 2) + '</pre>'); 

編輯:從@isvforall添加了代碼進行演示。 我們的解決方案都使用遞歸,我們只是以不同的方式構建樹。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM