
私は次のような構造を持っています(完全なファイルの例はこちら):
{
{
"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回連続して適用します。