我从下面的查询中得到 Cannot iterate over null (null)
因为 .property_history
不在 result
对象中。
在继续 map(...)
之前如何检查是否存在 .property_history
键?
我尝试使用类似 sold_year= `echo "$content"| jq '如果有("property_history") 那么
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'
关于json - 如何在迭代值之前检查 jq 中是否存在 'key',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42097410/