У меня есть структура json, которая выглядит следующим образом:
{
"lorry1": {
"box1": [
{"item": "shoes", "state": "new"},
{"item": "snacks", "state": "new"}
],
"box2": [
{"item": "beer", "state": "cold"},
{"item": "potatoes"}
]
},
"lorry2": {
"box1": [
{"item": "shoes", "state": "new"},
{"item": "snacks", "state": "new"}
],
"box2": [
{"item": "beer", "state": "lukewarm"}
]
}
}
Теперь я хочу знать, где я могу найти обувь: я мог бы придумать этот запрос jq:
to_entries | select(.[].value | .[][].item=="shoes") | map({"lorry": "\(.key)" })
Но это дает мне только грузовики. Полезно, но пока не совсем. Я бы тоже хотел узнать, в какой коробке они находятся.
Я придумал это, но это явно неверно:
to_entries | select(.[].value | .[][].item=="shoes") | keys as $box |map({"lorry": "\(.key)", "box": $box })
Ответ, который я хотел бы get is lorry1, box1 и lorry2, box1.
Еще лучше: я хотел бы найти все предметы и предоставить информацию, например:
"shoes": [ {"lorry1", "box1"}, {"lorry2", "box1" } ],
"snacks": [ {"lorry1", "box1"}, {"lorry2", "box1"} ],
"beer": [ {"lorry1", "box2"}, {"lorry2", "box2"} ],
"potatoes": [ {"lorry1", "box2"} ]
, но это может быть спрос многовато :)