如何比较一个字段,该字段是在两个文件的阵列的每一个对象共同和做更新数组以及(how to compa

2019-10-29 12:14发布

样品input1.json

 [{ "organizationId": "org1", "test1": "UP", "key1": "value1" }, { "organizationId": "org2", "test1": "UP", "key1": "value3" }] 

样品input2.json

 [{ "organizationId": "org1", "test2": "DOWN", "key1": "value4" }, { "organizationId": "org3", "test2": "DOWN", "key1": "value5" }] 

预计output.json

 [{ "organizationId": "org1", "test1": "UP", "key1": "value4", "test2": "DOWN" }, { "organizationId": "org2", "test1": "UP", "key1": "value3" }, { "organizationId": "org3", "test2": "DOWN", "key1": "value5" } ] 

输入是两个文件的阵列对象。 我的目标是合并两个对象,如果他们有相同的值,并保留其他物体完好。 我部分通过分组来实现这一

jq -s '[ .[0] + .[1] | group_by(.organizationId)[] | select(length > 1) |add ]' ìnput1.json input2.json

集团通过organizationId对象。 在两个输入“organizationId”:“ORG1”可用,因此它可以进行分组。 我现在面临的问题是我失去其他对象“organizationId”:input1.json“organizationId”“ORG2”:“org3”input2.json不每个人存在的文件。

分组的基本原理实现,但我确实需要从两个文件保存任何其他对象即使没有匹配。 如果我们使用GROUP_BY如果我们想保留的其他对象? 如果不是这样,怎么可以用JQ我达到预期的输出?

Answer 1:

对于更广泛的受众,解决方案,使所有对象(分组和不分组),请使用以下

jq -s '[ .[0] + .[1] | group_by(.organizationId)[] |add ]' ìnput1.json input2.json

如果只有分组的对象,然后用下面。

jq -s '[ .[0] + .[1] | group_by(.organizationId)[] | select(length > 1) | add ]' ìnput1.json input2.json

我不得不说JQ是如此的强大 ! :)



文章来源: how to compare one field that is common in each object of an array in two files and do update the array as well