我是 bash 脚本的新手。我试图编写一个合并多个 json 文件的脚本。例如:
文件 1:
{
"file1": {
"foo": "bar"
}
}
文件 2:
{
"file1": {
"lorem": "ipsum"
}
}
合并文件:
{
"file1": {
"foo": "bar"
},
"file2": {
"lorem": "ipsum"
}
}
这是我想出的:
awk 'BEGIN{print "{"} FNR > 1 && last_file == FILENAME {print line} FNR == 1 {line = ""} FNR==1 && FNR != NR {printf ","} FNR > 1 {line = $0} {last_file = FILENAME} END{print "}"}' json_files/* > json_files/all_merged.json
它有效,但我觉得有更好的方法来做到这一点。有什么想法吗?
最佳答案
用 awk 处理 JSON 并不是一个好主意。任意更改无意义的空格会破坏您的代码。相反,使用 jq
;它是为这种事情而制作的。要组合两个对象,请使用 *
运算符,即对于两个文件:
jq -s '.[0] * .[1]' file1.json file2.json
对于任意多的文件,使用 reduce
将其按顺序应用于所有文件:
jq -s 'reduce .[] as $item ({}; . * $item)' json_files/*
-s
开关使 jq
在处理它们之前将 JSON 文件的内容读取到一个大数组中。
关于json - 使用 bash 脚本合并 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29636331/