Das klingt wie eine grundlegende Frage, aber ich habe schon seit einiger Zeit nach einer besseren Lösung gesucht ...Mit jq, wie zwei Arrays mit verschiedenen Schlüsseln und Werten aus zwei JSON-Dateien subtrahiert werden?
Ich habe die folgenden Dateien:
file0.json:
{
"d": {
"aaData": [
{"a":1},
{"a":2},
{"a":3},
{"a":4}
]
}
}
und
file1.json:
[
{"b":1},
{"b":2},
{"b":7}
]
und ich möchte eine Subtraktion zwischen dann mit dem erwarteten Ergebnis:
{
"key": 3
}
{
"key": 4
}
I des folgenden Befehls gedacht, die Arbeit erledigen:
bash$ jq -s '[.d.aaData[].a] - [.[].b] | { key: .}' file0.json file1.json
aber es gibt mir den Folgefehler:
Cannot index array with string "b"
Was Sinn macht, da [.[1].b]
would't ein Array erstellen, aber so etwas wie [1][2][7]
die einzige Art, wie ich das erwartete Ergebnis bekommen verwaltet wurde die schmutzige Lösung in meiner Bash-Skript Codierung:
bash$ a=$(jq '[.d.aaData[].a] | {key1: .}' file0.json)
bash$ b=$(jq '[.[].b] | {key2: . }' file1.json)
bash$ c=$(echo -n $a,$b)
bash$ echo $c
{ "key1": [ 1, 2, 3, 4 ] },{ "key2": [ 1, 2, 7 ] }
bash$ d=${c//"},{"/","}
bash$ echo $d
{ "key1": [ 1, 2, 3, 4 ] , "key2": [ 1, 2, 7 ] }
bash$ echo -n $d | jq '.key1 - .key2 | { key: .[] }'
{
"key": 3
}
{
"key": 4
}
Ich bin ziemlich sicher, es gibt einen besseren Weg, es mit jq zu tun .... kann einfach nicht finden, wie ...
T Hank du sehr viel !! Funktioniert perfekt :) – FJunqueira