You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用jq查询含缺失free字段的JSON中free为true的节点名称?

解决jq查询含缺失字段JSON的报错问题

问题说明

最初的JSON结构如下:

{
  "node1": {
    "name": "host001",
    "free": true
  },
  "node2": {
    "name": "host002",
    "free": false
  },
  "node3": {
    "name": "host003",
    "free": false
  },
  "node4": {
    "name": "host004",
    "free": true
  }
}

使用命令 .[],select(.free == true).name 可以正常筛选出free为true的节点名称。

但当JSON中混入不包含free字段的元素(比如新增的id字段):

{
  "id": "foo",
  "node1": {
    "name": "host001",
    "free": true
  },
  "node2": {
    "name": "host002",
    "free": false
  },
  "node3": {
    "name": "host003",
    "free": false
  },
  "node4": {
    "name": "host004",
    "free": true
  }
}

原命令会报错:parse error: Invalid numeric literal at line 2, column 4。

解决方案

使用has("free")函数先过滤出包含free字段的元素,再进行条件筛选,修正后的命令如下:

.[] | select(has("free") and .free == true) | .name

原理说明

原命令直接访问.free属性,当元素不存在该字段时,jq会因类型不匹配抛出错误。通过has("free")先判断元素是否包含目标字段,再结合.free == true的条件,就能确保只处理符合结构要求的元素,避免报错的同时得到正确结果。执行修正后的命令,会输出:

"host001"
"host004"

内容的提问来源于stack exchange,提问作者Burps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:25:19