json - 使用 jq 处理巨大的 json 数组文件

标签 json jq

我有相对较小的对象的巨大(~7GB)json 数组。

是否有相对简单的方法来过滤这些对象而不将整个文件加载到内存中?

--stream 选项看起来合适,但我不知道如何将 [path,value] 流折叠到原始对象。

最佳答案

jq 1.5 有一个流解析器。 jq FAQ给出了如何将 JSON 对象的顶级数组转换为其元素流的示例:

$ jq -nc --stream 'fromstream(1|truncate_stream(inputs))'
[{"foo":"bar"},{"foo":"baz"}]
{"foo":"bar"}
{"foo":"baz"}

这可能足以满足您的目的,但值得注意的是 setpath/2 可能会有所帮助。以下是制作传单流的方法:
jq -c --stream '. as $in | select(length == 2) | {}|setpath($in[0]; $in[1])'

jq 手册中提供了更多信息和文档:
https://stedolan.github.io/jq/manual/#Streaming

关于json - 使用 jq 处理巨大的 json 数组文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32182087/

相关文章:

java - 异步任务android后返回JSON数据

android - 使用 MultiPartEntityBuilder 从 Android 发送 JSON 数据时,无法在 Flask 服务器中使用 get_json()

json - jq-选择具有给定键名的对象

json - 将 JSON 文件中的所有时间戳转换为 bash 中的 unix 时间戳(Ubuntu)

php - jQuery AJAX PHP JSON 问题

json - cloudformation 模板中的 opsworks 参数和资源

javascript - 数据表从API获取JSON而不设置 "aaData"

json - 是否可以使用 jq 进行 sort_by 然后再次按子项进行 sort_by

json - 使用 jq 进行大小写转换时出现错误 'explode input must be a string'

javascript - 使用 jq 访问嵌套数组