programing

값을 반복하기 전에 jq에 'key'가 있는지 확인하는 방법

subpage 2023. 2. 28. 23:31
반응형

값을 반복하기 전에 jq에 'key'가 있는지 확인하는 방법

나는 이해한다Cannot iterate over null (null)다음 질문에서 왜냐하면.property_history에는 없습니다.result물건.

의 존재를 확인하려면 어떻게 해야 합니까?.property_history진행하기 전에 키를 누르다map(...)?

이런 걸 써봤는데sold_year= `echo "$content" | jq 'if has("property_history") then map(select(.event_name == "Sold"))[0].date' else null end

원본 쿼리:

sold_year=`echo "$content" | jq '.result.property_history | map(select(.event_name == "Sold"))[0].date'`

JSON:

{  
   "result":{  
      "property_history":[  
         {  
            "date":"01/27/2016",
            "price_changed":0,
            "price":899750,
            "event_name":"Listed",
            "sqft":0
         },
         {  
            "date":"12/15/2015",
            "price_changed":0,
            "price":899750,
            "event_name":"Listed",
            "sqft":2357
         },
         {  
            "date":"08/30/2004",
            "price_changed":0,
            "price":739000,
            "event_name":"Sold",
            "sqft":2357
         }
      ]
   }
}

select-expression은 에서 사용할 수 있습니다.jq성취하고자 하는 일을 할 수 있도록 하는 거죠

jq '.result 
  | select(.property_history != null) 
  | .property_history 
  | map(select(.event_name == "Sold"))[0].date'

기술적으로, 속성 존재 여부를 테스트하려면has/1단, 현재 상황에서는 postfix를 사용하는 것이 좋습니다.?연산자. 예:

$ jq '.result 
  | .property_history[]?
  | select(.event_name == "Sold") 
  | .date'
"08/30/2004"

사용하다has("mykey1")(개체의 경우) 또는has(0)(어레이의 경우):

jq 'has("name")' <<< "{\"name\": \"hello\"}"

출력:

true

요령은 //를 빈칸 함께 사용하는 것입니다.

jq '.result.property_history // empty | map(select(.event_name == "Sold"))[0:1][].date'

또 다른 방법은 다음과 같은 추가 선택을 사용하는 것입니다.

jq '.result.property_history | select(.) | map(select(.event_name == "Sold"))[0:1][].date'

일반 패턴:

try (...) // "default_value"

당신의 논리로:

jq 'try (.result.property_history | map(select(.event_name == "Sold"))[0].date) // "default_value"'

try(캐치 없음) 표현에 실패하면 빈칸이 반환됩니다. //에 값이 비어 있는 경우의 기본값을 나타냅니다.

언급URL : https://stackoverflow.com/questions/42097410/how-to-check-for-presence-of-key-in-jq-before-iterating-over-the-values

반응형