_.property_history
_がresult
オブジェクトに存在しないため、以下のクエリからCannot iterate over null (null)
を取得します。
map(...)
に進む前に_.property_history
_キーの存在を確認するにはどうすればよいですか?
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
で select-expression を使用して、目的のことを行うことができます。
jq '.result | select(.property_history != null) | .property_history | map(select(.event_name == "Sold"))[0].date'
"08/30/2004"
?
修正後演算子を使用できます。
$ jq '.result | .property_history? | .[] | select(.event_name == "Sold") | .date'
"08/30/2004"