我正在尝试使用--argjson合并文件,但会抛出
参数列表太长
还有其他方法可以合并这些文件吗?
试图使用--slurpfile,但无法获得所需的输出
[
{
"path": "1"
},
{
"path": "a/1"
},
{
"path": "a/2"
}
]
jq --argjson groupInfo "$(jq .data file1.json)" '.records[].version.data+=$groupInfo' file2.json
文件1:
{
"id": "test",
"data": [
{
"path": "a/1"
},
{
"path": "a/2"
}
],
"information": {
"id": "1"
}
}
文件2:
{
"records": [
{
"version": {
"data": [
{
"path": "1"
}
]
}
}
]
}
输出文件:
{
"records": [
{
"version": {
"data": [
{
"path": "1"
},
{
"path": "a/1"
},
{
"path": "a/2"
}
]
}
}
]
}
答案 0 :(得分:1)
--arg
和--argjson
选项适用于少量JSON。尽管--argfile
选项在技术上已被弃用,但它很适合您的方法:
jq --argfile groupInfo <(jq .data file1.json) '
.records[].version.data+=$groupInfo' file2.json
还有其他选择。例如
jq -s '
.[0].data as $groupInfo
| .[1]
| .records[].version.data+=$groupInfo
' file1.json file2.json
我会让您弄清楚如何使用--slurpfile
:-)
答案 1 :(得分:0)
或者,使用基于步行路径的unix实用程序 jtc
可以实现相同的JSON操作:
bash $ <file2.json jtc -w'<data>l' -mi file1.json -i[data]
{
"records": [
{
"version": {
"data": [
{
"path": "1"
},
{
"path": "a/1"
},
{
"path": "a/2"
}
]
}
}
]
}
bash $
-w
)指向插入点(在file2.json
中)file1.json
)也可以指向要插入的位置(-i[data]
)-m
应用了 merge-insert (即对象被合并而不是被扩展) PS>披露:我是jtc
-用于JSON操作的shell cli工具的创建者