Jackson ObjectMapper对象

使用ObjectMapper进行读写

我们可以使用ObjectMapper的readValue方法将JSON内容反序列化为Java对象。同样,我们也可以使用wrtieValue方法将Java对象序列化为JSON。

public class Car {
    private String name;
    private Integer age;
    // standard getters setters
}

Java对象转JSON

File file = new File("user.json");
ObjectMapper mapper = new ObjectMapper();
User user = new User("张三", 20);
mapper.writeValue(file, user);
// 文件中输出
// {"name":"张三","age": 20}

如果希望将Java对象转换为字符串或者字节数组,可以使用writeValueAsStringwriteValueAsBytes方法:

String userAsString = mapper.writeValueAsString(user);

JSON转Java对象

readValue函数还可以接受其它形式的输入,比如从JSON文件中读取数据:

或者从网络获取JSON字符串文件:

日期处理

Data转long

默认的Jackson日期格式,该格式将 Date 序列化为来自1970年1月1日以来的毫秒数(long类型)。

使用SimpleDateFormat

使用ObjectMapper内置的时间处理

集合处理

或者List

忽略未知的JSON字段

有时候,JSON 中的字段要比 Java 对象的字段多的情况下,Jackson会在这种情况下抛出异常,因为在 Java 对象中找不到该字段。这种情况下可以使用Jackson配置忽略这些额外的字段。

不允许基本类型为null

如果 JSON 字符串包含其值为null的字段对应相应的Java对象中是基本数据类型的字段,Jackson ObjectMapper默认会处理基本数据类型为null的情况,我们可以将Jackson ObjectMapper默认配置为失效,这样基本数据为null就会转换失败。

Jackson JSON 树模型

嵌套JSON对象

假设我们有如下JSON数据源。

现在我们需要将上述嵌套的JSON数据序列化到Product对象中,分别将JSON字符串中的第一个、第二个、第三个name映射到Product的name、brandName、ownerName字段上。

要映射嵌套的brandName属性,首先需要将嵌套的brand对象解析道Map中并获取name属性,然后映射到ownerName,需要将嵌套的owner对象解析道Map中并获取name属性。

使用JsonNode映射

首先,使用ObjectMapper对象的readTree方法将JSON字符串转换为JsonNode对象,然后从JsonNode对象中功能获取所需的值。

最后更新于