次のようなjsonデータがあります。
_{
"p": {
"d": {
"a" : {
"r": "foo",
"g": 1
},
"b": {
"r": "bar",
"g": 2
}
},
"c": {
"e": {
"r": "baz",
"g": 1
}
},
...
}
}
_
私は次のようなものが欲しいです:
_{
"d": [
"a",
"b"
],
"c": [
"e"
]
}
_
「p」の下の第1レベルのキーのリストは_jq '.p|keys'
_で取得でき、第2レベルの構造とキーはjq '.p|map(.|keys)'
で取得できますが、組み合わせる方法がわかりません。それ。
キーを保持しながらJSONオブジェクトの値をマップするには、map
の代わりにmap_values
を使用します。
jq '.p | map_values(keys)'
1.5より前のjqバージョンでは、map_values
は定義されていません。代わりに、[]|=
を使用できます。
jq '.p | . []|= keys'
reduceおよびsetpathを使用するソリューションを次に示します。
.p
| reduce keys[] as $k (
.
; setpath([$k]; .[$k] | keys)
)