Как скопировать данные из одного JSON в другой с помощью JQ - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть два входа json, и я хочу, чтобы jq создал новый json, копируя элементы из второго массива в соответствующую позицию в первом:

1-й json:

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

2nd 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 голосов
/ 21 сентября 2018

Следующее принимает простой подход к тому, чтобы быть немного пешеходным:

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, вы можете избежать издержек "slurping", запустив:

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

, предполагая, что merge.jq содержит:

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