ruby - 在 Ruby 中读取大型 JSON 文件时出现问题

标签 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 来减小文件的大小,但不幸的是,我受到无法安装 gems 的限制。

最佳答案

这是IO.read的限制。

您可以将文件分割成更小的部分(例如 1 GB)并单独读取它们:

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)

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

关于ruby - 在 Ruby 中读取大型 JSON 文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35420337/

相关文章:

ruby-on-rails - Ruby 挽救多个特定错误

javascript - Jquery 将来自 asp.net mvc 5 Controller 的 json 放入 js 数组中

java - 使用 JSON 解析数据创建新对象

ruby-on-rails - Rails 路由 : Nested, 成员、集合、命名空间、范围和可定制

Ruby =~ 与 === 运算符

ruby-on-rails - Vimeo Rails 设计 OmniAuth SSL 错误仅限 Windows

ruby - 删除hadoop上超过x天的文件

javascript - 使用 AJAX/JSON 提供静态 HTML 和生成内容有什么好处?

json - Grails框架中使用的JSON解析器库是什么?

php - MySQL 到 JSON (firebase)