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

如何在不加载JSON到内存且不重编译jq时确定其最大嵌套深度?

无需重编译jq时,命令行确定JSON嵌套深度

如果JSON文档能正常加载到内存(嵌套深度未触发jq的256上限),直接用路径遍历计算最大深度:

  • 执行命令:jq 'paths | length | max' input.json
    • 逻辑:paths生成所有叶子节点的路径数组,length计算每个路径的嵌套层级数,max取所有层级数的最大值。

若文档嵌套深度超过256,直接执行上述命令会触发深度报错,此时用--stream模式绕过限制:

  • 执行命令:jq --stream 'select(length == 2) | .[0] | length' input.json | sort -nr | head -n1
    • 逻辑:--stream将JSON拆分为[路径数组, 节点值]的流式数据,select(length == 2)筛选出带值的节点,提取路径数组后计算其长度(即嵌套深度),最后通过排序取最大值。
JSON无法加载到内存时,用jq确定最大深度

这种场景必须依赖--stream模式,它不需要加载整个文档到内存,而是逐块处理数据:

  • 纯jq实现命令:jq --stream -n 'reduce inputs as $in (0; if $in | length == 2 then ($in[0] | length) as $d | if $d > . then $d else . end else . end)' input.json

    • 逻辑:-n配合inputs读取流式数据,reduce遍历所有输入并维护当前最大深度变量,遇到带值节点时计算其深度并更新最大值,最终输出最大嵌套深度。
  • 结合awk简化的命令:jq --stream 'select(length == 2) | .[0] | length' input.json | awk '{if ($1 > max) max=$1} END {print max}'

    • 逻辑:用jq提取所有节点的深度值,再通过awk遍历记录最大值并输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:39:19