如何使用jq将数据从一个json复制到另一个

时间:2018-09-21 14:39:31

标签: json merge jq

我有两个json输入,我想jq构建一个新的json,将元素从第二个数组复制到第一个的对应位置

第一个json:

[
   {"foo": "foo1", "bar": "bar1"},
   {"foo": "foo2", "bar": "bar2"},
   {"foo": "foo3", "bar": "bar3"}
]

第二个json:

[[
   "baz1",
   "baz2",
   "baz3"
]]

预期结果:

[
   {"foo": "foo1", "bar": "bar1", "baz": "baz1"},
   {"foo": "foo2", "bar": "bar2", "baz": "baz2"},
   {"foo": "foo3", "bar": "bar3", "baz": "baz3"}
]

我已经尝试过此命令行,但似乎不起作用

jq -n --argfile o1 "1st.json" --argfile o2 "2nd.json" "[$o1 []  | .baz= $o2[][]]"

1 个答案:

答案 0 :(得分:1)

以下内容采用了一种简单的方法,以成为行人:

jq -s -f merge.jq 1.json 2.json

假设文件merge.jq包含:

.[1][0] as $two
| .[0]
| reduce range(0; length) as $i (.;
    .[$i].baz = $two[$i] )

变化

如果您的jq支持--argfile选项,则可以通过运行以下命令来避免“浪费”的开销:

jq --argfile two 2.json -f merge.jq 1.json

假设merge.jq包含:

reduce range(0; length) as $i (.; 
  .[$i].baz = $two[0][$i] )