J'obtiens Cannot iterate over null (null)
à partir de la requête ci-dessous car .property_history
N'est pas présent dans l'objet result
.
Comment vérifier la présence de la touche .property_history
Avant de continuer avec map(...)
?
J'ai essayé d'utiliser quelque chose comme sold_year= `echo "$content" | jq 'if has("property_history") then map(select(.event_name == "Sold"))[0].date' else null end
Requête d'origine:
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
}
]
}
}
Vous pouvez utiliser select-expression dans jq
pour faire ce que vous avez l'intention de réaliser, quelque chose comme,
jq '.result | select(.property_history != null) | .property_history | map(select(.event_name == "Sold"))[0].date'
"08/30/2004"
Vous pouvez utiliser le ?
opérateur post-fix:
$ jq '.result | .property_history? | .[] | select(.event_name == "Sold") | .date'
"08/30/2004"