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以便我留下所有广告商的网址列表。

我最初想我可以做这样的事情:

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

但这行不通。

答案1

您在这里有两个基本选项(带有完整文件):

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

在第一个中,您[]连续应用操作两次,在第二个中,您与管道运算符一起组成两个单独的过滤器。我发现使用额外的管道更容易使用和调试,但是对于您的目的来说,这些管道都是相同的。

.[]通用迭代始终适用于本次迭代的单个输入值,因此它必须是第一的表达式中的元素,并且在其他任何地方都是语法错误,但[]应用于其左侧的特定值在任何地方都可以。

jq 文档中没有很好地描述您可以abc[]完全编写而不是只能编写这一事实,但您可以。.[]您可以将其视为.[]应用于[]身份过滤器.,尽管我认为这实际上是一种特殊情况。


在这种情况下,您可以将其缩小为:

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

它连续三次应用迭代器操作,因为顶级对象中只有一个关键“类别”。

相关内容