从大JSON文件

时间:2017-11-06 23:09:39

标签: json ruby unix edit

我有几个以({1}}结尾的巨大(> 2GB)JSON文件。这是我的测试文件示例,它是2 GB JSON文件的最后25个字符:

test.json

,\n]

我需要删除 ":{"value":false}}}}}}, ] 并从最后一行的最后三个字符添加回,\n。整个文件分为三行:前端和端括号都在各自的行上,JSON数组的所有内容都在第二行。

我无法将整个流加载到内存中以执行以下操作:

]

因为文件太大了。我尝试了several approaches,包括Ruby&#39>:

string[0..-2]

和UNIX' s:

chomp!(",\n]")

这两个都没有改变我的JSON文件。我通过以下方式查看了最后25个字符:

sed

也做了:

tail -c 25 filename.json

验证新文件版本和旧文件版本的字节大小是否相同。

任何人都可以帮助我理解为什么这些方法都不起作用吗?

1 个答案:

答案 0 :(得分:2)

如果你想要进行这样的外科手术,没有必要阅读整个文件。相反,你可以只覆盖文件中的最后几个字节:

file = 'huge.json'

IO.write(file, "\n]\n", File.stat(file).size - 5)

这里的关键是从末尾开始记录尽可能多的字节数,否则你需要修剪文件长度,尽管你可以在truncate的情况下做到这一点。< / p>