web-dev-qa-db-ja.com

jq-異なる名前のキーを反復処理する方法

私はこのようなJSONを持っています

{
  "keyword1": {
    "identifier1": 16
  },
  "keyword2": {
    "identifier2": 16
  }
}

そして、識別子を取得するためにキーワードをループする必要があります(ここで正しい用語を使用しているかどうかはわかりません)。とてもシンプルに見えますが、キーワードの名前がす​​べて違うので、どうやって扱うのかわかりません。

9
Adam vonNieda

この質問の元のタグはjqだったので、ここにjqソリューションがあります。

.[] | keys[]

たとえば、質問に示されている入力では、次のようになります。

$ jq '.[] | keys[]' input.json

"identifier1"
"identifier2"

キー名を順番に取得するには、keys_unsortedを使用します。

21
peak

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"
  }
}
1
turiyag