1. ホーム
  2. json

値を反復する前に、jqに'key'があるかどうかを確認する方法

2023-09-30 18:02:52

質問

私は 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
         }
      ]
   }
}

どのように解決するのですか?

あなたは 選択式 jq のように、意図することを行うために、何か。

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