Bash脚本:合并多个JSON文件成一个JSON文件

5

我有一个包含多个子文件夹的文件夹,里面都是json文件。

我需要编写一个bash脚本将所有json文件合并成一个具有有效格式的大json文件。

1)首先尝试使用jq将每个目录中的所有json文件合并,然后再将它们合并成一个大文件。但我没有成功。我使用了以下命令:

jq -rs 'reduce .[] as $item ({}; . * $item)'

2)另一种选项是在开始时创建一个包含“ [”的json文件-->处理所有目录中的所有文件,并将每个文件的内容附加到-->在末尾追加“]”。

我能否只使用jq以第一种方式实现相同的结果?


实际上,我通过以下方式成功去掉了 [] :jq '.[]' $jsonFile >> $merged_json。 - zbeedatm
1个回答

10
一个非常简单的方法是:
jq -s 'flatten' $target/*/*.json > $merged_json

一种替代方案(在需要使用 | 的情况下):

cat $target/*/*.json | jq -s 'flatten' > $merged_json

或者如果有太多文件

find $target/* -name \*json cat {} |  jq -s 'flatten' > $merged_json

在目标文件夹中运行得非常完美。但是当我尝试在循环内使用它来为每个目录创建单独的文件时,它没有创建文件!!! cat $d/*.json | jq -s 'flatten' > "$dir_name"_merged.json,其中dir_name = $(basename $d) - zbeedatm
你需要根据自己的需求进行适应,不需要执行第二个循环。 - EchoMike444
请忽略它,是我的错。我在不同的位置创建了它。 - zbeedatm
甚至不需要 cat,因为 jq 将接受 $STDIN。jq -s 'flatten' $target/*/*.json > $merged_json - earlonrails

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接