【问题标题】:How to increase depth limit of jq?如何增加jq的深度限制?
【发布时间】:2023-02-22 04:48:43
【问题描述】:

当尝试使用 jq 缩小深度嵌套的 JSON 文件(~10k 深)时,出现解析错误:

$ jq -c . <input.json >minified.json
parse error: Exceeds depth limit for parsing at line 227263, column 355

如何增加深度限制?有命令行选项吗?我在手册页中找不到任何关于此的内容。

【问题讨论】:

  • 如果您只是使用 jq -c 转换为紧凑形式,而不是做任何更花哨的事情,我会考虑切换到替代实现; github.com/itchyny/gojq f/e 上有一个 native-Go 替代品,或者 python -mjson.tool --compact 可能就足够了。仍然可能在其中任何一个上达到最大堆栈深度,但我会从测试开始。

标签: json jq minify


【解决方案1】:

解决方法是使用其他工具,例如jj,它完美地完成了工作,而且通常也可能更快,即使 jq 没有出错。

jj -u <input.json >minified.json

二进制文件可在:https://github.com/tidwall/jj/releases/latest 或通过自制软件获得:

brew install tidwall/jj/jj

【讨论】:

    【解决方案2】:

    关于 C 实现,您必须在 jv_parse.c 中更改 MAX_PARSING_DEPTH 后重新制作二进制文件:

    #define MAX_PARSING_DEPTH (512)
    

    据我所知,将限制增加到一个非常大的数字似乎没有任何缺点。

    【讨论】:

    • 感谢您查看源代码!如果这是一个 CLI 选项,那就太好了。
    猜你喜欢
    • 2021-04-19
    • 2011-02-04
    • 2016-02-18
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 2021-10-28
    • 2013-04-25
    • 1970-01-01
    相关资源
    最近更新 更多