我是新手来编写脚本。我试图编写一个合并多个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
它有效,但我觉得有更好的方法。有什么想法吗?
答案 0 :(得分:17)
使用awk处理JSON并不是一个非常好的主意。无意义的空白中的任意更改将破坏您的代码。相反,使用jq
;这是为了这种事情。要组合两个对象,请使用*
运算符,即两个文件:
jq -s '.[0] * .[1]' file1.json file2.json
对于任意多个文件,请使用reduce
将其顺序应用于所有文件:
jq -s 'reduce .[] as $item ({}; . * $item)' json_files/*
-s
开关使jq
在处理之前将JSON文件的内容读入大型数组。