web-dev-qa-db-ja.com

jqを使用してJSON出力から特定のフィールドを抽出する

次のようなJSON出力があります。

{
  "example": {
    "sub-example": [
      {
        "name": "123-345",
        "tag" : 100
      },
      {
        "name": "234-456",
        "tag" : 100
      },
      {
        "name": "4a7-a07a5",
        "tag" : 100
      }
    ]
  }
}

3つの「名前」フィールドの値を抽出し、3つの変数に格納したい。

私は試した cat json_file | jq '.["example.sub-example.name"]'「名前」フィールドの値を抽出しますが、それは機能しません。

Jq(または他の方法)を使用してこれを達成する方法を教えてもらえますか?

36
rmb

nameフィールドを抽出するだけの場合、探しているコマンドはjq '.example."sub-example" | .[] | .name'。名前を配列に保持する場合は、jq式全体を角括弧で囲みます。

40
aaaaaa123456789

Jq 1.3では、フィルターを使用できます。

.example["sub-example"] | .[] | .name

またはよりコンパクトに:

.example["sub-example"][].name

もちろん、これらはjqの以降のバージョンでも動作します。

14
peak