나는 다음과 같은 구조를 가지고 있습니다 (전체 파일 예시는 여기):
{
{
"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
여기에는 두 가지 기본 옵션이 있습니다(전체 문서 포함).
jq '.categories[][].notificationURL' bundle.json
jq '.categories[] | .[].notificationURL' bundle.json
첫 번째에서는 []
작업을 연속으로 두 번 적용하고, 두 번째에서는 파이프 연산자와 함께 두 개의 별도 필터를 구성합니다. 추가 파이프를 사용하면 사용하고 디버그하는 것이 더 쉽다고 생각하지만 사용자의 목적에 있어서는 모두 동일합니다.
.[]
일반 반복은 항상 이 반복의 단일 입력 값에 대해 작동하므로첫 번째표현식의 요소이며 다른 곳에서는 구문 오류가 발생하지만 []
왼쪽에 적용되는 특정 값은 어디에서나 괜찮습니다.
abc[]
단순히 작성하는 대신 전체를 작성할 수 있다는 사실은 jq 문서에 잘 설명되어 있지 않지만 가능합니다. 이것을 ID 필터 에 적용하는 .[]
것으로 생각할 수 있지만 실제로는 특별한 경우라고 생각합니다..[]
[]
.
이 경우 다음과 같이 범위를 좁힐 수 있습니다.
jq '.[][][].notificationURL' bundle.json
최상위 개체에는 키 "범주"가 하나만 있기 때문에 반복기 작업을 연속으로 세 번 적용합니다.