jqはネストされたオブジェクトの属性を取得します。

jqはネストされたオブジェクトの属性を取得します。

私は次のような構造を持っています(完全なファイルの例はこちら):

{
  {
    "weather": [
      {
        "advertiser": "Worldwide Forecasts",
        "notificationText": "Weather - Check the Weather Now - Weather",
        "notificationURL": "http://www.worldwideforecasts.com/b/index.html?aff_sub=NL01R15178755321634q5X2zHqXo1976US&utm_term=weather&utm_campaign=bing&utm_content=new-weather%20-%20Weather%20-%202&utm_medium=Search_SEM&utm_source=7&nlhash=BR6et8ISl5dCdAHF&requestId=NL01R15178755321634q5X2zHqXo1976US",
        "uuid": "9f27d258-f9d5-4b19-9f70-291eb9cbab51",
        "creativeSetId": "2799cbab-1fa1-4f15-bbc9-c92381dbfc57"
      },
      {
        "advertiser": "Worldwide Forecasts",
        "notificationText": "Weather - Check the Weather Now - Weather",
        "notificationURL": "http://www.worldwideforecasts.com/b/index.html?aff_sub=NL01R15178755321634q5X2zHqXo1976US&utm_term=weather&utm_campaign=bing&utm_content=new-weather%20-%20Weather%20-%202&utm_medium=Search_SEM&utm_source=7&nlhash=BR6et8ISl5dCdAHF&requestId=NL01R15178755321634q5X2zHqXo1976US",
        "uuid": "9f27d258-f9d5-4b19-9f70-291eb9cbab51",
        "creativeSetId": "2799cbab-1fa1-4f15-bbc9-c92381dbfc57"
      }
    ]
  }
}

例と同様に、いくつかのカテゴリがありますweather

すべての広告主のURLリストが残るようにjqすべての値のリストを取得するために使用したいものです。notificationURL

私は最初に次のことができると思いました。

cat file.json | jq .[].[].notificationURL

しかし、これはうまくいきません。

ベストアンサー1

これには2つの基本的なオプションがあります(文書全体を含む)。

jq '.categories[][].notificationURL' bundle.json
jq '.categories[] | .[].notificationURL' bundle.json

1 つ目は、[]ジョブを 2 回連続して適用し、2 つ目ではパイプ演算子で 2 つの別々のフィルタを構成します。追加のパイプを使用すると、使用してデバッグする方が簡単だと思いますが、ユーザーの目的ではすべて同じです。

.[]通常の反復は常にこの反復の単一入力値に対して機能するため、最初式の要素であり、他の場所では構文エラーが発生しますが、[]左側に適用される特定の値はどこでも問題ありません。

abc[]単に書くのではなく、全体を書くことができるという事実は、jqドキュメントにはよく説明されていませんが、可能です。これをIDフィルタに適用する.[]と考えることができますが、実際には特別な場合だと思います。.[][].


この場合、次のように範囲を狭めることができます。

jq '.[][][].notificationURL' bundle.json

最上位オブジェクトにはキー「カテゴリ」が1つしかないため、イテレータ操作を3回連続して適用します。

おすすめ記事