jq:如何将复杂的json对象与数组合并

时间:2019-10-29 11:50:34

标签: jq

我想使用jq合并到json对象。这些文件在Label和Description数组中有所不同。结果中应显示所有语言的所有描述。对象也可能更复杂,因此解决方案应该递归地工作。

文件1:

{
    "A": {
        "Description": [{
                "Language": "",
                "Text": "Default Text 1"
            }, {
                "Language": "de",
                "Text": "German Text 1"
            }
        ],
        "Label": [{
                "Language": "",
                "Text": "Default Text 2"
            }, {
                "Language": "de",
                "Text": "German Text 2"
            }
        ]
    }
}

文件2:

{
    "A": {
        "Description": [{
                "Language": "en",
                "Text": "English Text 1"
            }
        ],
        "Label": [ {
                "Language": "en",
                "Text": "English Text 2"
            }
        ]

    }

}

预期结果:

{
    "A": {
        "Description": [{
                "Language": "",
                "Text": "Default Text 1"
            }, {
                "Language": "de",
                "Text": "German Text 1"
            }, {
                "Language": "en",
                "Text": "English Text 1"
            }

        ],
        "Label": [{
                "Language": "",
                "Text": "Default Text 2"
            }, {
                "Language": "de",
                "Text": "German Text 2"
            }, {
                "Language": "en",
                "Text": "English Text 2"
            }
        ]
    }
}

谢谢, 亚历克斯

2 个答案:

答案 0 :(得分:0)

好吧,除非缺少以下内容,否则我认为这个问题是重复的:How to merge 2 json file using jq?

答案 1 :(得分:0)

这将为您提供带有示例的预期结果。也许它将使您开始寻找更通用的解决方案。

jq 'reduce inputs as $i (.; 
                            .A.Description += $i.A.Description
                          | .A.Label += $i.A.Label
                        )' File1.json File2.json

如果您搜索“合并数组”,我认为您会更幸运。我发现了一些看起来与您相似的案例。