我在磁盘上有一个非常大的.json文件。我想使用Jackson解析器将其实例化为Java对象。
该文件如下所示:
[ { "prop1": "some_value",
"prop2": "some_other_value",
"something_random": [
// ... arbitrary list of objects containing key/value
// pairs of differing amounts and types ...
]
},
// ... repated many times ...
{
}
]
基本上它是一个很大的对象数组,每个对象都有两个标识它的字符串属性,然后是另一个内部对象数组,其中每个对象是属性和值的随机集合,主要是字符串和整数,但是也包含数组。
由于这个对象布局,我没有可以用来轻松实例化这些对象的设置模式。使用org.json处理器需要尝试为整个文件分配一个字符串,该字符串由于其大小而经常失败。所以我想使用流解析器,但我完全不熟悉它。
我最终想要的是一个Map,其中String是prop1的值,SomeObject是保存整个对象(顶级数组条目)的数据的东西。也许只是JSON,然后可以在需要时解析它?
无论如何,关于如何为此编写代码的想法是受欢迎的。
答案 0 :(得分:3)
由于您不希望将整个事物绑定为单个对象,因此您可能希望使用readValues()
ObjectReader
方法。如果单个值的结构是通用的,您可能希望将它们绑定为java.util.Map
s或JsonNode
s(杰克逊的树模型)。所以你会做类似的事情:
ObjectMapper mapper = new ObjectMapper();
ObjectReader reader = mapper.reader(Map.class); // or JsonNode.class
MappingIterator<Map> it = reader.readValues(new File("stuff.json"));
while (it.hasNextValue()) {
Map m = it.nextValue();
// do something; like determine real type to use and:
OtherType value = mapper.convertValue(OtherType.class);
}
迭代整个事情。