json - 如何在迭代值之前检查 jq 中是否存在 'key'

标签 json bash jq

我从下面的查询中得到 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-expressionjq 中做你打算实现的事情,例如,

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/

相关文章:

sql - 如何通过 id 以外的任何其他方式获取记录 - SugarCRM

linux - BASH - 如何使用 sed 从网站中提取 URL

bash - 使用换行符将文件内容放入 unix 变量中

java - (Java、JSON)使用 Youtube API 从包含已删除项目的播放列表中获取数据

python - 在 web.py 中返回多行

java - 通过 JSON Android Java 动态设置选项卡标题

linux - 为什么这个 bash 脚本需要我按回车键才能继续?

json - 使用 jq 解析两个列表中存在的键(即使其中一个列表中可能不存在)

jq - 如何查看我最近完成的 Codebuild 构建项目的状态?

json - 使用 jq --arg 传递的数字参数与 == 不匹配的数据