Jq

jq獲取嵌套對象的屬性

  • February 3, 2020

我有以下結構(此處為完整文件範例):

{
 {
   "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

它連續三次應用迭代器操作,因為頂級對像中只有一個鍵“類別”。

引用自:https://unix.stackexchange.com/questions/491669