Arrays 将任意数量的数组合并到单个数组中?
我有一系列的JSON文件,我一直在使用via。每个文件由一系列字典组成,例如Arrays 将任意数量的数组合并到单个数组中?,arrays,json,file,concatenation,jq,Arrays,Json,File,Concatenation,Jq,我有一系列的JSON文件,我一直在使用via。每个文件由一系列字典组成,例如 file1.json:[{“id”:1}] file2.json:[{“id”:2}] 我找到的唯一一个将所有输入文件成功合并到一个输出数组的命令是: jq--slurp.[0]+[1]'file1.json file2.json 此命令按预期输出[{“id”:1},{“id”:2}] 我正在编写一个shell脚本,它将一组变量文件合并到一个JSON数组中作为输出。我的脚本将执行如下操作: find-类型f-in
- file1.json:
[{“id”:1}]
- file2.json:
[{“id”:2}]
jq--slurp.[0]+[1]'file1.json file2.json
此命令按预期输出[{“id”:1},{“id”:2}]
我正在编写一个shell脚本,它将一组变量文件合并到一个JSON数组中作为输出。我的脚本将执行如下操作:
find-类型f-iname'*.json'| xargs jq'过滤器'
这应该调用jq
像jq'FILTER'file1.json file2.json…
是否有我缺少的一个功能,它将获取所有输入文件并首先将它们合并到一个连续的对象列表中,而无需将筛选器重写为类似于[0]+[1]+[2]…
?的内容,给定:
1.json
2.json
3.json
然后此命令:
jq --slurp 'map(.[])' 1.json 2.json 3.json
返回:
[
{
"id": 1
},
{
"id": 2
},
{
"id": 3
}
]
或者简单地说:
jq --slurp 'flatten' 1.json 2.json 3.json
通常最好避免使用
-s
选项,尤其是当您的jq版本支持输入时,就像所有版本>=1.5一样
在任何情况下,如果您的jq版本支持输入
,您可以编写:
jq -n '[inputs[]]' 1.json 2.json 3.json # etc
或者任何一种变体满足您的需求
否则,您可以简单地编写:
jq -s add 1.json 2.json 3.json # etc
关于展平的注释
flatte
本身就是无情的:
$ jq flatten <<< '[[[1], [[[[2]]]]]]'
[1,2]
$jq展平完美,谢谢!如果启用了--slurp
,则展平和映射(.[])
都可以工作。我无法获得[inputs[0]]
以尊重所有文件,但是,jq-n“[inputs[]”似乎可以工作。
jq -n '[inputs[]]' 1.json 2.json 3.json # etc
jq -s add 1.json 2.json 3.json # etc
$ jq flatten <<< '[[[1], [[[[2]]]]]]'
[1,2]