簡體   English   中英

遍歷遞歸json樹並合並

[英]Traverse recursive json tree and merge

我試圖遍歷遞歸 json 樹如下(json2),如果標識符匹配如下,則與另一個 json(json)合並。 請注意,只要對象可用,它就可能有對象對象,但無論標識符如何位於同一對象層次結構中。

注意:標識符值始終是唯一的

我已經演練了 underscore.js 庫,但找不到任何符合此要求的函數。 在正常列表情況下, findWhere 足以解決,但情況並非如此,因為它具有多級層次結構。

JSON 2:

{
    "identifier1": "123456",
    "identifier2": "234567"
}

JSON 1:

{
    subtopic: [
        {
            "title": "title 1",
            "subtitle": "title 2",
            "objects": [{
                "title": "123"
                "label": "456"
                "objects": [
                    {
                        "identifier": "identifier1",
                        "object": {
                            "object-1": "123",
                            "object-2": "456"
                        }
                    },
                    {
                        "identifier": "identifier2",
                        "object": {
                            "object-1": "123",
                            "object-2": "456"
                        }
                    }
                ]
            }]
        },
        {
            ...
            ...
            Similar as above
        },
    ]
}

合並后

{
    subtopic: [
        {
            "title": "title 1",
            "subtitle": "title 2",
            "objects": [{
                "title": "123"
                "label": "456"
                "objects": [
                    {
                        "result": "123456",
                        "identifier": "identifier1",
                        "object": {
                            "object-1": "123",
                            "object-2": "456"
                        }
                    },
                    {
                        "result": "234567"
                        "identifier": "identifier2",
                        "object": {
                            "object-1": "123",
                            "object-2": "456"
                        }
                    }
                ]
            }]
        },
        {
            ...
            ...
            Similar as above
        },
    ]
}

至少您需要一些迭代和遞歸樣式來獲取用於設置新屬性的正確內部對象。

 function merge(array, object) { Object.keys(object).forEach(function (k) { function iter(a) { if (a.identifier === k) { r = a; return true; } return Array.isArray(a.objects) && a.objects.some(iter); } var r; array.some(iter); if (r) { r.result = object[k]; } }); } var object2 = { "identifier1": "123456", "identifier2": "234567" }, object1 = { subtopic: [{ "title": "title 1", "subtitle": "title 2", "objects": [{ "title": "123", "label": "456", "objects": [{ "identifier": "identifier1", "object": { "object-1": "123", "object-2": "456" } }, { "identifier": "identifier2", "object": { "object-1": "123", "object-2": "456" } }] }] }] }; merge(object1.subtopic, object2); document.write('<pre>' + JSON.stringify(object1, 0, 4) + '</pre>');

暫無
暫無

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

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