【发布时间】:2021-04-21 10:38:47
【问题描述】:
我想知道是否可以利用ObjectMapper 中的Jackson 来逐一读取事件。
我有一个大型 JSON 文件,其中包含许多需要转换为 XML 的事件。我不想将完整的 JSON 事件加载到我的内存中,而是想一个一个地处理事件。因此,我正在使用 Java Jackson 库,它可以遍历 JSON 文件并一次获取单个 JSON 事件,然后我可以将其转换为 XML。这样,一次只会将一个事件加载到内存中。
我知道我可以使用来自 Jackson 的 JsonParser,它将逐个遍历 JSON 文件,但这样我需要处理很多事情。
我有从 XSD 创建的 Java 类(使用 JAXB2)所以我正在考虑使用来自 Jackson 的 ObjectMapper 类,它可以直接将每个事件映射到其对应的 Java 类,稍后我可以使用它来转换使用Marshalling方法到对应的XML。
我不明白如何使用 ObjectMapper 逐一读取事件并将其分配给相应的 Java 类。
以下是我的 JSON 文件的简单版本:(这是一个示例 JSON,我的原始 JSON 非常复杂)
{
"@context":"https://context.org/context.jsonld",
"isA":"SchoolManagement",
"format":"application/ld+json",
"schemaVersion":"2.0",
"creationDate":"2021-04-21T10:10:09+00:00",
"body":{
"members":[
{
"isA":"student",
"name":"ABCS",
"class":10,
"coaching":[
"XSJSJ",
"IIIRIRI"
],
"dob":"1995-04-21T10:10:09+00:00"
},
{
"isA":"teacher",
"name":"ABCS",
"department":"computer science",
"school":{
"name":"ABCD School"
},
"dob":"1995-04-21T10:10:09+00:00"
},
{
"isA":"boardMember",
"name":"ABCS",
"board":"schoolboard",
"dob":"1995-04-21T10:10:09+00:00"
}
]
}
}
我想一一读取“members”数组中的事件,判断是不是“student”、“teacher”等,然后分配给对应的class。
public class Main {
public static void main(String[] args) throws JsonParseException,
JsonMappingException,
IOException,
JAXBException {
final ObjectMapper objectMapper = new ObjectMapper();
// Accept the Null values for some fields
objectMapper.setSerializationInclusion(Include.NON_NULL);
// If any unknown properties found then do not fail
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//Here I want to read the element within an array
Student event = objectMapper.readValue(Main.class.getResourceAsStream("/events.json"), Student.class);
System.out.println(event);
}
}
【问题讨论】:
标签: java json jackson objectmapper jackson2