我觉得答案可能与此重复:Jackson - Json to POJO With Multiple Entries但我认为这个问题可能不同。我也使用原始数据绑定而不是完整数据绑定。
就像那个问题的提问者一样,我在文件中有多个对象,我正在尝试将它们转换为POJO并将它们填充到我的设计数据库中,这样我就可以快速而不是慢慢地访问数据。
这里的文件大小为几十GB,每个文件中有多达数百万个对象。无论如何,这是我到目前为止:
ObjectMapper mapper = new ObjectMapper();
Map<String,Object> data = mapper.readValue(new File("foo.json"), Map.class);
System.out.println(data.get("bar"));
这对于在foo中打印第一个对象的bar元素非常有用,但是我需要一种方法来迭代遍历每个元素,不会占用我所有的内存。
感谢。
答案 0 :(得分:11)
您不必在Streaming(JsonParser
)和ObjectMapper
之间进行选择,同时执行这两项操作!
使用解析器遍历一下,但随后调用JsonParser.readValueAs(MyType.class)
绑定单个JSON对象。
或者,调用ObjectMapper
的{{1}}方法在适当的点传递JsonParser。或者使用readValue()
并以这种方式迭代。
答案 1 :(得分: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();} }
答案 2 :(得分:1)
假设您有一个包装对象的数组,请创建一个JsonParser,然后使用适当的类型调用readValuesAs
。它会为您提供一个Iterator
,其中包含您在使用对象时读取文件的所有对象。