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

如何用jq统计嵌套JSON中type为null或数组含null的对象数量

统计JSON中符合type规则的对象总数(jq实现)

需求说明

需要递归统计任意深度嵌套JSON中,满足以下任一条件的对象总数量:

  • 对象的type属性值为字符串"null"
  • 对象的type属性值为数组,且数组内包含"null"元素

给定示例JSON中符合条件的对象共2个,示例内容如下:

{
  "A": {
    "type": "string"
  },
  "B": {
    "type": "null"
  },
  "C": {
    "type": [
      "null",
      "string"
    ]
  }
}

原有命令jq '[..|select(.type?=="null")] | length'仅能匹配type直接为字符串"null"的场景,无法识别type为数组且包含"null"的情况,无法返回正确结果。

可行命令

逻辑直观版

jq '
[
  .. 
  | select(
      .type? == "null" 
      or (.type? | type == "array" and index("null") != null)
    )
] | length
'

逻辑说明

  • ..:递归遍历JSON所有层级的节点,支持深层嵌套结构
  • .type?:安全读取当前节点的type属性,节点无type属性时直接跳过,不会抛出错误
  • 第一个判断分支:匹配type值直接为字符串"null"的对象
  • 第二个判断分支:先校验type值是否为数组,再检查数组中是否存在"null"元素
  • 所有符合条件的节点会被收集到数组中,最终通过length输出数组长度即符合条件的对象总数

在给定示例JSON上执行上述命令,会正确返回结果2。

简洁写法

也可以通过统一把type值打平为一维数组再判断的方式简化写法,效果完全一致:

jq '[.. | select(.type? as $t | [$t] | flatten | index("null") != null)] | length'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:57:27