我有一个巨大的json文件(++ 500mb),由嵌套json文件的动态结构组成。此json使用python中的json.dump提取到文件中。 我的问题是如何使用缓冲方法读取这个巨大的json文件?
由于如果我在同一运行时中读取所有字符串,则会引发Java堆错误。 我的想法是我想读取每个记录的json,然后解析它,之后继续下一个记录,解析它,依此类推。但是我怎么知道哪一个是一个json记录的结尾。因为我找不到每个json记录之间的分隔符。
有什么建议吗?请询问是否不清楚。 谢谢
答案 0 :(得分:0)
假设您不能使用-Xmx
简单地增加堆空间大小,则可以切换JSON读取逻辑以使用SAX JSON解析器,例如RapidJSON或Jackson Streaming API。这些库不会将整个JSON主体存储在内存中,而是会针对每个遇到的JSON构造发出一个事件:
{
"hello": "world",
"t": true
...
}
在使用RapidJSON时将产生以下内容:
StartObject()
Key("hello", 5, true)
String("world", 5, true)
Key("t", 1, true)
Bool(true)
...
EndObject()