Jackson框架使用教程

Jackson框架使用教程

介绍

Jackson是Spring MVC 的默认 json 解析器。本文对比我们常用的fastjson进行简单是使用教程。

maven依赖

<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.11.2</version> 
</dependency>

在springboot中我们引入spring-boot-starter-web后会自动依赖jackson

ObjectMapper创建

ObjectMapper objectMapper = new ObjectMapper();

对象转换

User user = new User();
user.setName("rongK");
user.setAge(28);
user.setCreateTime(new Timestamp(new Date().getTime()));

String s = objectMapper.writeValueAsString(user);
System.out.println("对象序列化:" + s);// 对象序列化:{"name":"rongK","age":28,"createTime":1598081001761}

User u = objectMapper.readValue(s, User.class);
System.out.println("对象反序列化:" + u);// 对象反序列化:User(name=rongK, age=28, createTime=2020-08-22 15:23:21.761)

集合转换

List<User> list = new ArrayList<>();
for (int i = 0; i < 2; i++) {
    User user = new User();
    user.setName("rongK" + i);
    user.setAge(i);
    user.setCreateTime(new Timestamp(new Date().getTime()));
    list.add(user);
}

String s = objectMapper.writeValueAsString(list);
System.out.println("集合序列化:" + s);// 集合序列化:[{"name":"rongK0","age":0,"createTime":1598081001764},{"name":"rongK1","age":1,"createTime":1598081001764}]

List<User> userList = objectMapper.readValue(s, new TypeReference<List<User>>(){});
System.out.println("集合反序列化:" + userList);// 集合反序列化:[User(name=rongK0, age=0, createTime=2020-08-22 15:23:21.764), User(name=rongK1, age=1, createTime=2020-08-22 15:23:21.764)]

map转换

HashMap<String, Object> map = new HashMap<>();
map.put("name", "rong");
map.put("age", "11");
map.put("createTime", new Timestamp(new Date().getTime()));

String s = objectMapper.writeValueAsString(map);
System.out.println("Map序列化:" + s);// Map序列化:{"createTime":1598081001743,"name":"rong","age":"11"}

User user= objectMapper.readValue(s, User.class);
System.out.println("Map反序列化:" + user);// Map反序列化:User(name=rong, age=11, createTime=2020-08-22 15:23:21.743)

HashMap userMap= objectMapper.readValue(s, HashMap.class);
System.out.println("Map反序列化:" + userMap);// Map反序列化:{createTime=1598081001743, name=rong, age=11}

Map<String, User> userMap2 = new HashMap<>();
for (int i = 0; i < 2; i++) {
    User u = new User();
    u.setName("rongK" + i);
    u.setAge(i);
    u.setCreateTime(new Timestamp(new Date().getTime()));
    userMap2.put("key"+i, u);
}
String s2 = objectMapper.writeValueAsString(userMap2);
System.out.println("Map序列化:" + s2);// ap序列化:{"key1":{"name":"rongK1","age":1,"createTime":1598081001759},"key0":{"name":"rongK0","age":0,"createTime":1598081001759}}

Map<String, User> map3= objectMapper.readValue(s2, new TypeReference<Map<String, User>>() {});
System.out.println("Map反序列化:" + map3);// Map反序列化:{key1=User(name=rongK1, age=1, createTime=2020-08-22 15:23:21.759), key0=User(name=rongK0, age=0, createTime=2020-08-22 15:23:21.759)}

json对象操作

ObjectNode userNode = objectMapper.createObjectNode();
userNode.put("name", "rong");
userNode.put("age", 13);
userNode.set("node", objectMapper.createObjectNode());
System.out.println("构建 ObjectNode:" + userNode.toString());// 构建 ObjectNode:{"name":"rong","age":13,"node":{}}

//通过 path 查找节点
JsonNode name = userNode.path("name");
System.out.println("查找子节点 name:" + name.asText());// 查找子节点 name:rong

//读取 json
JsonNode rootNode = objectMapper.readTree(userNode.toString());
System.out.println("Json 转 JsonNode:" + rootNode);// Json 转 JsonNode:{"name":"rong","age":13,"node":{}}

//在反序列化时忽略在 json 中存在但 Java 对象不存在的属性
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

//JsonNode 转换成 java 对象
User user = objectMapper.treeToValue(userNode, User.class);
System.out.println("JsonNode 转对象:" + user);// JsonNode 转对象:User(name=rong, age=13, createTime=null)

//java 对象转换成 JsonNode
JsonNode node = objectMapper.valueToTree(user);
System.out.println("对象转 JsonNode:" + node);// 对象转 JsonNode:{"name":"rong","age":13,"createTime":null}

相关配置

//在反序列化时忽略在 json 中存在但 Java 对象不存在的属性
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//在序列化时自定义时间日期格式
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
//在序列化时忽略值为 null 的属性
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
//在序列化时忽略值为默认值的属性
objectMapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_DEFAULT);
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值