私はこのようなJSONを持っています
{
"keyword1": {
"identifier1": 16
},
"keyword2": {
"identifier2": 16
}
}
そして、識別子を取得するためにキーワードをループする必要があります(ここで正しい用語を使用しているかどうかはわかりません)。とてもシンプルに見えますが、キーワードの名前がすべて違うので、どうやって扱うのかわかりません。
この質問の元のタグはjq
だったので、ここにjq
ソリューションがあります。
.[] | keys[]
たとえば、質問に示されている入力では、次のようになります。
$ jq '.[] | keys[]' input.json
"identifier1"
"identifier2"
キー名を順番に取得するには、keys_unsorted
を使用します。
JSONからたくさんのキーを整理することを望んでここに来ましたが、2つの機能が便利であることがわかりました。 「to_entries」、「from_entries」、「with_entries」の3つの関数があります。次のように、キーまたは値で値をフィルタリングできます。
JSON_DATA='
{
"fields": {
"first": null,
"second": "two",
"third": "three"
}
}
'
echo "$JSON_DATA" | jq '{fields: .fields | with_entries(select(.value != null and .key != "third")) }'
出力:
{
"fields": {
"second": "two"
}
}