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 来做到这一点或者有更好的工具吗?
最简单且完全合理的方法是使用 -s 命令行选项并add按照以下方式进行:
jq -s add json_files/*
Run Code Online (Sandbox Code Playgroud)
当然,您可能希望以不同的方式指定文件列表。它们的指定顺序也很重要。
笔记:
这个Q实际上只是Use jq to concatenate JSON arrays in multiple files的变体
reduce也可以使用,但您需要以nullor开头,[]而不是{}。
运算符“*”(毫不奇怪)与“+”有很大不同!
| 归档时间: |
|
| 查看次数: |
2006 次 |
| 最近记录: |