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.

모든 광고주의 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

최상위 개체에는 키 "범주"가 하나만 있기 때문에 반복기 작업을 연속으로 세 번 적용합니다.

관련 정보