杰克逊-从文件一一读取不同的对象

时间:2019-06-05 08:54:41

标签: java jackson objectmapper

我有一个像这样的文件:

[{
    "messageType": "TYPE_1",
    "someData": "Data"
},
{
    "messageType": "TYPE_2",
    "dataVersion": 2
}]

如您所见,有一个文件包含不同类型的JSON对象。我也有一个ObjectMapper能够解析这两种类型。我必须逐一读取JSon对象(因为此文件可能非常大),并为每个对象获取正确的对象(Type1Obj或Type2Obj)。

我的问题是我要如何用Jackson来从文件中逐个读取JSon对象。

1 个答案:

答案 0 :(得分:0)

您可以将数组读取为类似于以下内容的通用Jackson JSON对象

ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(jsonData);

然后使用遍历数组的所有子项

rootNode#elements()

并使用类似于{p>的检查JsonNode,将messageType个子节点中的每个子节点解析为各自的类型

if ("TYPE_1".equals(childNode.get("messageType")) {
    Type1Class type1 = objectMapper.treeToValue(childNode, Type1Class.class);
} else // ...