使用 jq 连接 JSON 文件的目录

tan*_*ngo 5 shell json concatenation jq

我有一个包含大约 100 个 JSON 文件的目录,每个文件都有 100 个简单记录的数组,我想将它们连接到一个文件中以作为静态数据包含在应用程序中,因此我不必重复进行 API 调用来检索小片段。(我一次只能下载 100 条记录;这就是我有 100 个短文件的原因。)

这是一个示例文件,缩短为两条记录以在此处显示:

[
 {
   "id": 11531,
   "title": "category 1",
   "count": 5
 },
 {
   "id": 11532,
   "title": "category 2",
   "count": 5
 }
]
Run Code Online (Sandbox Code Playgroud)

我的研究得出了一个可行的解决方案,但适用于两个文件,每个文件有两条记录:

jq -s '.[0] + .[1]' file1.json file2.json > output.json
Run Code Online (Sandbox Code Playgroud)

该消息来源还表明该行可以处理一个目录(目前其中只有两个文件):

jq -s 'reduce .[] as $item ({}; . * $item)' json_files/* > output.json
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

jq: error (at json_files/categories-11-20.json:0): object ({}) and array ([{"id":1153...) cannot be multiplied
Run Code Online (Sandbox Code Playgroud)

我想问题可能出在*繁殖上,所以我在那个地方尝试过+,但我收到了一条... cannot be added.消息。

有没有办法通过 jq 来做到这一点或者有更好的工具吗?

pea*_*eak 6

最简单且完全合理的方法是使用 -s 命令行选项并add按照以下方式进行:

jq -s add json_files/* 
Run Code Online (Sandbox Code Playgroud)

当然,您可能希望以不同的方式指定文件列表。它们的指定顺序也很重要。

笔记: