杰克逊多个对象和巨大的json文件

Tom*_*ick 9 java json jackson

我觉得答案可能与此重复:杰克逊 - Json到POJO有多个条目,但我认为这个问题可能不同.我也使用原始数据绑定而不是完整数据绑定.

所以就像那个问题的提问者一样,我在文件中有多个对象,我正在尝试将它们变成POJO并将它们填充到我的设计数据库中,这样我就可以快速而不是慢慢地访问数据.

这里的文件大小为几十GB,每个文件中有多达数百万个对象.无论如何这里是我到目前为止:

ObjectMapper mapper = new ObjectMapper();
Map<String,Object> data = mapper.readValue(new File("foo.json"), Map.class);
System.out.println(data.get("bar"));
Run Code Online (Sandbox Code Playgroud)

这对于在foo中打印第一个对象的bar元素非常有用,但是我需要一种方法来迭代每个元素,这样就不会占用我所有的记忆.

谢谢.

Sta*_*Man 11

您不必在Streaming(JsonParser)和ObjectMapper两者之间做出选择!使用解析器遍历一下,然后调用JsonParser.readValueAs(MyType.class)绑定单个JSON对象.

或者,调用ObjectMapperreadValue()方法在适当的点传递JsonParser.或者以ObjectMapper.reader(Type.class).readValues()这种方式使用和迭代.


Mar*_*nik 8

使用此代码示例来查看基本概念.

final InputStream in = new FileInputStream("json.json");
try {
  for (Iterator it = new ObjectMapper().readValues(
      new JsonFactory().createJsonParser(in), Map.class); it.hasNext();)
    System.out.println(it.next());
}
finally { in.close();} }
Run Code Online (Sandbox Code Playgroud)