我尝试在shell脚本中使用jq工具(jq-json-processor)来合并两个json字段。
这里是文件的内容:
第一个文件
{ "username": "Bob",
"password": "verytrickipwd",
"windows": 6}
第二个文件(现在问题是我有一个新字段)
{ "username": "",
"password": "",
"windows": 6,
"doors":
}
我的预期结果
{ "username": "Bob",
"password": "verytrickipwd",
"windows": 6,
"doors":
}
使用此命令:
jq -f file1.json file2.json
答案 0 :(得分:2)
有几种方法可以“添加”两个JSON对象。在您的特定情况下,以下内容足够:
$ jq --argfile override file1.json '. + $override' file2.json
输出:
{
"username": "Bob",
"password": "verytrickipwd",
"windows": 6,
"doors": ""
}
如果您的jq不支持--argfile选项,则以下内容应该足够了:
$ jq -s add file2.json file1.json
请注意,在键名冲突的情况下,第二个文件(本例中为file1.json)的内容优先。
答案 1 :(得分:0)
以下解决方案应该按照您的要求进行,假设您更正了file2.json
,以使其有效JSON(“门”缺少值),例如
{
"username": "",
"password": "",
"windows": 6,
"doors": "doors"
}
并使用-s
选项
jq -s -f filter.jq file1.json file2.json
其中filter.jq
包含下面的过滤器,该过滤器使用 reduce 来合并对象,方法是在第一次遇到键时仅更新键。
reduce .[] as $i (
{}
; reduce ($i|keys[]) as $k (
.
; if .[$k] == null then .[$k] = $i[$k] else . end
)
)