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
範例類似的幾個類別。我想用來
jq
獲取所有值的列表,notificationURL
以便我得到所有廣告商的 URL 列表。我最初認為我可以做類似的事情:
cat file.json | jq .[].[].notificationURL
但這不起作用。
您在這裡有兩個基本選項(帶有完整文件):
jq '.categories[][].notificationURL' bundle.json jq '.categories[] | .[].notificationURL' bundle.json
在第一個中,您
[]
連續兩次應用該操作,在第二個中,您將兩個單獨的過濾器與管道運算符組合在一起。我發現使用額外的管道更容易使用和調試,但對於您的目的來說,它們都是相同的。
.[]
通用迭代始終適用於該迭代的單個輸入值,因此它必須是表達式中的第一個元素,並且在其他任何地方都是語法錯誤,但[]
應用於其左側的特定值在任何地方都可以。jq 文件中沒有很好地描述您完全可以編寫
abc[]
而不是僅編寫 的事實,但您可以。.[]
您可以將其.[]
視為應用於[]
身份過濾器.
,儘管我認為它實際上是一種特殊情況。在這種確切的情況下,您可以將其縮小到:
jq '.[][][].notificationURL' bundle.json
它連續三次應用迭代器操作,因為頂級對像中只有一個鍵“類別”。