当前位置: 首页 > 面试题库 >

用jq处理巨大的json-array文件

单展
2023-03-14
问题内容

我有相对较小的对象的巨大(〜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




 类似资料:
  • 问题内容: 我正在尝试处理较大的(可能多达200M)JSON文件。文件的结构基本上是对象数组。 因此,遵循以下原则: 每个对象都具有任意属性,不必与数组中的其他对象共享它们(例如,具有相同的属性)。 我想对数组中的每个对象进行处理,并且由于文件可能很大,因此无法将整个文件内容都包含在内存中,无法解码JSON并遍历PHP数组。 因此,理想情况下,我想读取文件,为每个对象获取足够的信息并进行处理。如果

  • 问题内容: 我有一个包含对象数组的json,每个对象在以下位置均包含唯一值: 我遵循了另一个答案,我可以使用jq和awk将整个文档分为多个文件 这样,输出文件将按顺序命名。 我如何使用值命名文件? 问题答案: 对于数组中的每个元素,将id和元素本身打印在两行中,因此您可以从奇数行中获取id并将偶数行打印到以id命名的文件中。

  • 问题内容: 要求 :我有一个.gz格式的Json文件。因此,压缩后的大小约为500 MB。当我提取它时,json文件几乎变成了大约10 GB。提取的JSON文件逐行包含单个JSON对象。我想要的是使用任何bash脚本或python程序基于字段对文件进行排序。 由于文件太大,因此不建议将其加载到内存中。因此,我使用了gzcat和cat bash命令来流式传输JSON数据,然后将它们通过管道传输到jq

  • 问题内容: 我正在尝试使用gson库(http://code.google.com/p/google-解析一些巨大的JSON文件(例如http://eu.battle.net/auction- data/258993a3c6b974ef3e6f22ea6f822720/auctions.json )JAVA中的gson / )。 我想知道解析这种大文件(约80k行)的最佳方法是什么,以及您是否知道

  • 问题内容: 我正在尝试将DMOZ内容/结构XML文件解析为MySQL,但是所有现有的脚本都已经很老了并且不能很好地工作。如何在PHP中打开大型(+ 1GB)XML文件进行解析? 问题答案: 只有两个php API真正适合处理大文件。第一个是旧的expatapi,第二个是较新的XMLreader函数。这些api读取连续流,而不是将整个树加载到内存中(这是simplexml和DOM所做的)。 例如,您