jq 中的输入 json 文件大小限制是多少?

What's the input json file size limit in jq?

是否存在 jq 处理的最大 json 文件大小。我从 github 来源构建 jq 1.6。

我尝试处理 288MB json 文件(在以下命令中,handwriting_data_info1.json)并遇到以下错误:

$ jq 'INDEX(.images[]; .id) as $imgs | { "filename_with_label" :
                [ .annotations[] |
                 select(.attributes.type=="letter" ) |
                 $imgs[.image_id] + {label:.text} |
                {id:.id} + {filename:.file_name} + {label:.label}
                ]
                }' handwriting_data_info1.json > handwriting_data_info1_with_label.json

jq: src/jv.c:1261: jvp_object_get_slot: Assertion `slot == -1 || (slot >= 0 && slot < jvp_object_size(object))' failed.
Aborted (core dumped)

仅供参考,上面使用的 jq 过滤器定义适用于相对较小的 json 文件。

我认为 jq 的最大输入 json 文件大小。如果是这样,有没有办法增加 jq 的输入 json 文件大小?

感谢您的阅读。

  1. jq 可以处理任意长的 JSON 流,但是如果流中的任何单个 JSON 项目太大而无法放入内存,则 "streaming parser"必须使用。此解析器仅在指定 --stream 命令行选项时才处于活动状态。

  2. "streaming parser" 节省内存,但速度明显较慢且使用起来有些困难。有关流解析器的更多信息,请参阅 jq 手册和 jq FAQ.

  3. 验证 jq 是否可以在不使用 --stream 选项的情况下管理输入的一种方法是 运行 empty 过滤器,例如:

    jq空INPUT.json

  4. 发布的错误是断言错误;此类错误通常与输入实体的大小无关。但是,如果 jq 程序试图生成不适合内存的大型结构,则可能会生成此类错误。

除了 RAM 施加的上述限制外,我不知道对 JSON 输入的大小施加任何其他限制,而且我已经看到 jq 进程单个 JSON 多个实体每个千兆字节。