在ruby中解析巨大的JSON文件的最佳方法

时间:2015-05-25 02:45:29

标签: ruby-on-rails ruby json parsing

我很难解析一个巨大的json文件。

该文件大于1GB,我尝试使用这两个宝石:ruby-stream和yajl,它们都不起作用。

以下是发生的事情的一个例子。

fileStr = File.read("hugeJSONfile.json")

^这部分没问题。

但是当我尝试将fileStr加载到JSON哈希(通过ruby-stream或yajl)时,我的计算机冻结了。

有关如何更有效地执行此操作的任何其他想法?谢谢。

2 个答案:

答案 0 :(得分:3)

查看json-streamyajl

文档的关键引用:

JSON流:

  

文档本身永远不会完全读入内存。

yajl:

  

这个库的主要好处在于它的内存使用。由于它能够以块的形式解析流,因此其内存要求非常非常低。

您注册要查找的事件,并在读取JSON时返回键/值,而不是将其全部加载到ruby数据结构中(并因此加载到内存中)。

答案 1 :(得分:0)

好的,我能够解析它。

老实说,这不是最优雅的解决方案,但是在绝望的时候,解析一个巨大的JSON文件的一种快速方法是手动检查文件,注意一个模式,然后选择你需要的东西。

就我而言,这是我在伪代码中所做的事情

fileStr = File.read("hugeJSONfile.json")
arr = fileStr.split("[some pattern]")
arr.each do |str|
    extract desired value from str
end

同样,这不是最优雅的解决方案,但它的维护成本低,并且根据具体情况,只需适应您的笔记本电脑所能提供的功能。