jq - 合并两个 JSON 文件时出错 "cannot be multiplied"
jq - error when merging two JSON files "cannot be multiplied"
我有两个文件,其中包含一些 JSON。
File1 - 有些值可以是字符串,有些可能为空,VolumeId 始终设置。
[
{
"VolumeId": "vol-xxxxxxx1",
"Tag1": "Tag1Value",
"Tag2": "Tag2Value",
"Tag3": "Tag3Value",
"Tag4": "Tag4Value",
"Tag5": "Tag5Value",
"Tag6": "Tag6Value"
},
{
"VolumeId": "vol-xxxxxxx2",
"Tag1": "Tag1Value",
"Tag2": "null",
"Tag3": "null",
"Tag4": "Tag4Value",
"Tag5": "null",
"Tag6": "Tag6Value"
},
{
"VolumeId": "vol-xxxxxxx3",
"Tag1": "null",
"Tag2": "null",
"Tag3": "null",
"Tag4": "null",
"Tag5": "null",
"Tag6": "null"
}
]
File2 - VolumeId 将始终与 File1 中的匹配,Tag7 可能为空也可能不为空。
[
{
"VolumeId": "vol-xxxxxxx1",
"Tag7": "Tag7Value"
},
{
"VolumeId": "vol-xxxxxxx2",
"Tag7": "Tag7Value"
},
{
"VolumeId": "vol-xxxxxxx3",
"Tag7": "null"
}
]
我需要将这些组合成一个 JSON 数组:
[
{
"VolumeId": "vol-xxxxxxx1",
"Tag1": "Tag1Value",
"Tag2": "Tag2Value",
"Tag3": "Tag3Value",
"Tag4": "Tag4Value",
"Tag5": "Tag5Value",
"Tag6": "Tag6Value",
"Tag7": "Tag7Value"
},
{
"VolumeId": "vol-xxxxxxx2",
"Tag1": "Tag1Value",
"Tag2": "null",
"Tag3": "null",
"Tag4": "Tag4Value",
"Tag5": "null",
"Tag6": "Tag6Value",
"Tag7": "Tag7Value"
},
{
"VolumeId": "vol-xxxxxxx3",
"Tag1": "null",
"Tag2": "null",
"Tag3": "null",
"Tag4": "null",
"Tag5": "null",
"Tag6": "null",
"Tag7": "null"
}
]
我在尝试使用以下命令时遇到错误:
jq -s '.[0] * .[1]' /path/to/file1 /path/to/file2
array ([{"VolumeId...) and array ([{"VolumeId...) cannot be multiplied
感谢任何帮助。
你应该做什么:
文件1
{
"vol-xxxxxxx1": {
"Tag1": "Tag1Value",
"Tag2": "Tag2Value",
"Tag3": "Tag3Value",
"Tag4": "Tag4Value",
"Tag5": "Tag5Value",
"Tag6": "Tag6Value"
},
"vol-xxxxxxx2": {
"Tag1": "Tag1Value",
"Tag2": "null",
"Tag3": "null",
"Tag4": "Tag4Value",
"Tag5": "null",
"Tag6": "Tag6Value"
},
"vol-xxxxxxx3": {
"Tag1": "null",
"Tag2": "null",
"Tag3": "null",
"Tag4": "null",
"Tag5": "null",
"Tag6": "null"
}
}
文件2
{
"vol-xxxxxxx1": {
"Tag7": "Tag7Value"
},
"vol-xxxxxxx2": {
"Tag7": "Tag7Value"
},
"vol-xxxxxxx3": {
"Tag7": "null"
}
}
现在命令
jq -s '.[0] * .[1]' /path/to/file1 /path/to/file2
给出以下内容:
{
"vol-xxxxxxx1": {
"Tag1": "Tag1Value",
"Tag2": "Tag2Value",
"Tag3": "Tag3Value",
"Tag4": "Tag4Value",
"Tag5": "Tag5Value",
"Tag6": "Tag6Value",
"Tag7": "Tag7Value"
},
"vol-xxxxxxx2": {
"Tag1": "Tag1Value",
"Tag2": "null",
"Tag3": "null",
"Tag4": "Tag4Value",
"Tag5": "null",
"Tag6": "Tag6Value",
"Tag7": "Tag7Value"
},
"vol-xxxxxxx3": {
"Tag1": "null",
"Tag2": "null",
"Tag3": "null",
"Tag4": "null",
"Tag5": "null",
"Tag6": "null",
"Tag7": "null"
}
}
我假设您想将具有相同 .VolumeId
的所有条目合并为一个。为此,首先我们将 flatten
对象数组转换为对象数组。然后,我们group_by(.VolumeId)
。最后,我们 map
遍历每个组并 reduce
通过计算其所有元素的乘积。最终结果如下所示:
jq -s 'flatten | group_by(.VolumeId) | map(reduce .[] as $x ({}; . * $x))' /path/to/file1 /path/to/file2
我有两个文件,其中包含一些 JSON。
File1 - 有些值可以是字符串,有些可能为空,VolumeId 始终设置。
[
{
"VolumeId": "vol-xxxxxxx1",
"Tag1": "Tag1Value",
"Tag2": "Tag2Value",
"Tag3": "Tag3Value",
"Tag4": "Tag4Value",
"Tag5": "Tag5Value",
"Tag6": "Tag6Value"
},
{
"VolumeId": "vol-xxxxxxx2",
"Tag1": "Tag1Value",
"Tag2": "null",
"Tag3": "null",
"Tag4": "Tag4Value",
"Tag5": "null",
"Tag6": "Tag6Value"
},
{
"VolumeId": "vol-xxxxxxx3",
"Tag1": "null",
"Tag2": "null",
"Tag3": "null",
"Tag4": "null",
"Tag5": "null",
"Tag6": "null"
}
]
File2 - VolumeId 将始终与 File1 中的匹配,Tag7 可能为空也可能不为空。
[
{
"VolumeId": "vol-xxxxxxx1",
"Tag7": "Tag7Value"
},
{
"VolumeId": "vol-xxxxxxx2",
"Tag7": "Tag7Value"
},
{
"VolumeId": "vol-xxxxxxx3",
"Tag7": "null"
}
]
我需要将这些组合成一个 JSON 数组:
[
{
"VolumeId": "vol-xxxxxxx1",
"Tag1": "Tag1Value",
"Tag2": "Tag2Value",
"Tag3": "Tag3Value",
"Tag4": "Tag4Value",
"Tag5": "Tag5Value",
"Tag6": "Tag6Value",
"Tag7": "Tag7Value"
},
{
"VolumeId": "vol-xxxxxxx2",
"Tag1": "Tag1Value",
"Tag2": "null",
"Tag3": "null",
"Tag4": "Tag4Value",
"Tag5": "null",
"Tag6": "Tag6Value",
"Tag7": "Tag7Value"
},
{
"VolumeId": "vol-xxxxxxx3",
"Tag1": "null",
"Tag2": "null",
"Tag3": "null",
"Tag4": "null",
"Tag5": "null",
"Tag6": "null",
"Tag7": "null"
}
]
我在尝试使用以下命令时遇到错误:
jq -s '.[0] * .[1]' /path/to/file1 /path/to/file2
array ([{"VolumeId...) and array ([{"VolumeId...) cannot be multiplied
感谢任何帮助。
你应该做什么:
文件1
{
"vol-xxxxxxx1": {
"Tag1": "Tag1Value",
"Tag2": "Tag2Value",
"Tag3": "Tag3Value",
"Tag4": "Tag4Value",
"Tag5": "Tag5Value",
"Tag6": "Tag6Value"
},
"vol-xxxxxxx2": {
"Tag1": "Tag1Value",
"Tag2": "null",
"Tag3": "null",
"Tag4": "Tag4Value",
"Tag5": "null",
"Tag6": "Tag6Value"
},
"vol-xxxxxxx3": {
"Tag1": "null",
"Tag2": "null",
"Tag3": "null",
"Tag4": "null",
"Tag5": "null",
"Tag6": "null"
}
}
文件2
{
"vol-xxxxxxx1": {
"Tag7": "Tag7Value"
},
"vol-xxxxxxx2": {
"Tag7": "Tag7Value"
},
"vol-xxxxxxx3": {
"Tag7": "null"
}
}
现在命令
jq -s '.[0] * .[1]' /path/to/file1 /path/to/file2
给出以下内容:
{
"vol-xxxxxxx1": {
"Tag1": "Tag1Value",
"Tag2": "Tag2Value",
"Tag3": "Tag3Value",
"Tag4": "Tag4Value",
"Tag5": "Tag5Value",
"Tag6": "Tag6Value",
"Tag7": "Tag7Value"
},
"vol-xxxxxxx2": {
"Tag1": "Tag1Value",
"Tag2": "null",
"Tag3": "null",
"Tag4": "Tag4Value",
"Tag5": "null",
"Tag6": "Tag6Value",
"Tag7": "Tag7Value"
},
"vol-xxxxxxx3": {
"Tag1": "null",
"Tag2": "null",
"Tag3": "null",
"Tag4": "null",
"Tag5": "null",
"Tag6": "null",
"Tag7": "null"
}
}
我假设您想将具有相同 .VolumeId
的所有条目合并为一个。为此,首先我们将 flatten
对象数组转换为对象数组。然后,我们group_by(.VolumeId)
。最后,我们 map
遍历每个组并 reduce
通过计算其所有元素的乘积。最终结果如下所示:
jq -s 'flatten | group_by(.VolumeId) | map(reduce .[] as $x ({}; . * $x))' /path/to/file1 /path/to/file2