我有以下结构(此处为完整文件示例):
{
{
"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 文档中没有很好地描述您完全可以编写
abc[]
而不是仅编写的事实,但您可以。.[]
您可以将其.[]
视为应用于[]
身份过滤器.
,尽管我认为它实际上是一种特殊情况。在这种情况下,您可以将其缩小为:
它连续三次应用迭代器操作,因为顶级对象中只有一个键“类别”。