在Ruby

时间:2016-02-15 22:34:21

标签: ruby json

我在Ruby中读取大型JSON文件(2.9GB)时遇到问题。我正在使用此代码

json_file = File.read(filename)
results = JSON.parse(json_file)

当我尝试读取文件时,我收到错误:

Errno::EINVAL: Invalid argument - <filename>

我用较小的文件测试了相同的代码,它工作正常。为了验证文件是否正确写入,我试图用python读取它并且它可以工作。

JSON.parse的文件大小是否有限制?如果是这样,你能推荐一个替代方案吗?

我查看了msgpack以减少文件的大小,但遗憾的是我因为无法安装宝石而受到限制。

1 个答案:

答案 0 :(得分:2)

这是IO.read的限制。

您可以将文件拆分为较小的部分(例如,1千兆字节)并单独阅读:

dirname = File.dirname(filename)
`split -b 1024m #{filename} #{filename}.parts.`
Dir.chdir(dirname)
parts = Dir["#{filename}.parts.*"]
json = ''
parts.each do |partname|
  json += File.read(partname)
  File.delete(partname)
end
results = JSON.parse(json)

请耐心等待,这可能需要一段时间。