当我尝试使用jq缩小一个深度嵌套的JSON文件(~ 10 k深)时,我得到了一个解析错误:
jq
$ jq -c . <input.json >minified.json parse error: Exceeds depth limit for parsing at line 227263, column 355
我怎样才能增加深度限制?有命令行选项吗?我在手册页中找不到任何关于这个的信息。
nukf8bse1#
解决方法是使用另一个工具,例如jj,它可以完美地完成这项工作,而且通常可能更快,即使jq没有错误。
jj
jj -u <input.json >minified.json
二进制文件位于:https://github.com/tidwall/jj/releases/latest或通过自制程序:
brew install tidwall/jj/jj
rkue9o1l2#
gojq(jq在Go语言中的实现)在处理的最大深度上有一个限制:它大于1,024但小于10000。我已经验证了jj和我的基于“JSON机器”的实用程序jm都可以处理10,000的深度。下面是压缩JSON文档的等效方法,至少在不超过限制的情况下是这样:
jj -u @this < input.json jm input.json
axr492tv3#
关于C实现,您必须在jv_parse. c中更改MAX_PARSING_DEPTH之后重新生成二进制文件,其中相关行当前为:
#define MAX_PARSING_DEPTH (256)
据我所知,将上限提高到一个非常大的数字似乎没有任何不利因素。
3条答案
按热度按时间nukf8bse1#
解决方法是使用另一个工具,例如
jj
,它可以完美地完成这项工作,而且通常可能更快,即使jq
没有错误。二进制文件位于:https://github.com/tidwall/jj/releases/latest或通过自制程序:
rkue9o1l2#
gojq(jq在Go语言中的实现)在处理的最大深度上有一个限制:它大于1,024但小于10000。
我已经验证了jj和我的基于“JSON机器”的实用程序jm都可以处理10,000的深度。下面是压缩JSON文档的等效方法,至少在不超过限制的情况下是这样:
axr492tv3#
关于C实现,您必须在jv_parse. c中更改MAX_PARSING_DEPTH之后重新生成二进制文件,其中相关行当前为:
据我所知,将上限提高到一个非常大的数字似乎没有任何不利因素。