Объединение двух массивов json (загруженных в память) в один массив json - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть два массива json, которые я инициализировал, как указано ниже.

local=[{"account_id":"01C","id":"0XVWKCFV6P9CA5"},{"account_id":"CSDTHQ","id":"631QGYBNSF"},...............]

org=[{"account_id":"BJPKWSH","id":"15BS0XP4F91V6YH4G0PV"},{"account_id":"01BKK44V5F6A1FKH60Q0ANX9JX","id":"01BKK44V7"},.....................]

то, что я хочу, выглядит примерно так:

outputJson=[{"account_id":"BJPKWSH","id":"15BS0XP4F91V6YH4G0PV"},
{"account_id":"BJPKWSH","id":"15BS0XP4F91V6YH4G0PV"},
{"account_id":"01BKK44V5F6A1FKH60Q0ANX9JX","id":"01BKK44V7"},.....................]        

то есть я хочу объединить эти дваJSON массив в одно.Я попробовал это,

jq -s '.[0] * .[1]' <<< "$local $org"

, но это дает parse error: Invalid literal at line 1, column 17

Ответы [ 3 ]

0 голосов
/ 29 апреля 2019

Используйте +, а не *:

#!/bin/sh

j1='[{"account_id":"01C","id":"0XVWKCFV6P9CA5"},{"account_id":"CSDTHQ","id":"631QGYBNSF"}]'
j2='[{"account_id":"BJPKWSH","id":"15BS0XP4F91V6YH4G0PV"},{"account_id":"01BKK44V5F6A1FKH60Q0ANX9JX","id":"01BKK44V7"}]'
echo $(jq -s '.[0] + .[1]' <<EOF
$j1
$j2
EOF
)

производит:

[ { "account_id": "01C", "id": "0XVWKCFV6P9CA5" }, { "account_id": "CSDTHQ", "id": "631QGYBNSF" }, { "account_id": "BJPKWSH", "id": "15BS0XP4F91V6YH4G0PV" }, { "account_id": "01BKK44V5F6A1FKH60Q0ANX9JX", "id": "01BKK44V7" } ]
0 голосов
/ 29 апреля 2019

и альтернативный подход, основанный на Unix-инструменте Walk-Path для JSON: jtc:

переменные оболочки, которые должны быть заключены в кавычки, прежде чем их можно будет интерполировать:

bash $ lcl='[{"account_id":"01C","id":"0XVWKCFV6P9CA5"},{"account_id":"CSDTHQ","id":"631QGYBNSF"}]'
bash $ org='[{"account_id":"BJPKWSH","id":"15BS0XP4F91V6YH4G0PV"},{"account_id":"01BKK44V5F6A1FKH60Q0ANX9JX","id":"01BKK44V7"}]'
bash $ outputJson=$(echo "$org" | jtc -mi "$lcl")
bash $ echo $outputJson
[ { "account_id": "BJPKWSH", "id": "15BS0XP4F91V6YH4G0PV" }, { "account_id": "01BKK44V5F6A1FKH60Q0ANX9JX", "id": "01BKK44V7" }, { "account_id": "01C", "id": "0XVWKCFV6P9CA5" }, { "account_id": "CSDTHQ", "id": "631QGYBNSF" } ]
bash $ 

PS> Раскрытие информации: я создатель инструмента jtc

0 голосов
/ 29 апреля 2019

Я не уверен, что понимаю, что вам нужно.Если вам нужно просто объединить два массива в один, вы можете использовать

jq '[.[0][], .[1][]]' <<< "[$local, $org]"
...