在JAVA中读取超大且动态嵌套的JSON文件

时间:2018-11-07 00:30:27

标签: java json string buffer heap-memory

我有一个巨大的json文件(++ 500mb),由嵌套json文件的动态结构组成。此json使用python中的json.dump提取到文件中。 我的问题是如何使用缓冲方法读取这个巨大的json文件?

由于如果我在同一运行时中读取所有字符串,则会引发Java堆错误。 我的想法是我想读取每个记录的json,然后解析它,之后继续下一个记录,解析它,依此类推。但是我怎么知道哪一个是一个json记录的结尾。因为我找不到每个json记录之间的分隔符。

有什么建议吗?请询问是否不清楚。 谢谢

1 个答案:

答案 0 :(得分:0)

假设您不能使用-Xmx简单地增加堆空间大小,则可以切换JSON读取逻辑以使用SAX JSON解析器,例如RapidJSONJackson 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()