Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将任意数量的数组合并到单个数组中?_Arrays_Json_File_Concatenation_Jq - Fatal编程技术网

Arrays 将任意数量的数组合并到单个数组中?

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

我有一系列的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-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]