赞
踩
Jackson一个java处理json的类库,社区活跃,更新速度也很快。相比gson、fastjson等,强力推荐使用Jackson。
Jackson 有三个核心包,分别是 Streaming、Annotations、Databind,通过这些包可以方便的对 JSON 进行操作。
Streaming 在 jackson-core 模块。定义了一些低级别流处理相关的API以及特定的JSON实现。
Annotations 在 jackson-annotations 模块,包含了Jackson中的注解。
Databind 在 jackson-databind 模块, 在Streaming包的基础上实现了数据绑定,依赖于Streaming和Annotations包。
我们需要引入以上三个核心模块,不过由于jackson-databind依赖了jackson-core和 jackson-annotations,所以只需要引入jackson-databind即可。
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>2.13.2</version>
- </dependency>
- <!--
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-annotations</artifactId>
- <version>2.13.2</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-core</artifactId>
- <version>2.13.2</version>
- </dependency>
- -->

ObjectMapper提供了读写JSON的功能,既可以读写基本pojo,也可以读写通用JSON树模型(JsonNode),还提供了执行转换的相关功能。之所以称为ObjectMapper就是因为他负责json和java对象之间的映射转换。(对于时间类型的转换,要注意字符串的时间格式,不满足则使用objectMapper.setDateFormat来设置时间格式)常用的方法如:
1)readValue方法将json反序列化为java对象
readValue接收参数 Class/JavaType/TypeReference,JavaType只能通过com.fasterxml.jackson.databind.type.TypeFactory来创建,TypeReference是抽象类,直接new匿名实现即可。比如构造 Map<String, Object>,
new TypeReference<Map<String, Object>>() {};
objectMapper.getTypeFactory().constructMapType(Map.class, String.class, Object.class);
2)writeValue方法将对象序列化成指定目标
3)readTree方法将json反序列化为JsonNode
4)valueToTree方法将java对象转换为JsonNode
5)treeToValue方法将JsonNode转换为java对象
所有JSON节点的基类,它构成了Jackson实现的JSON树模型(JSON Tree Model)的基础。可以将其视为类似于XML DOM树中的DOM节点。若想修改或访问 json 部分属性,树模型是不错的选择。程序中常用的子类是ObjectNode。
1)xxxValue方法 返回该节点的对应类型值(和asXXX的区别就是asXXX有个转换的过程)
2)get 方法获取到某个节点
3)findValue方法查找某个节点
包含 json字符串转换为 java对象,json字符串转换为 java map,json数组转换为 java list,java对象转换为 json字符串,树模型处理获取 json字符串里某个字段值,修改 json字符串里的字段值等。
代码示例如下:
- public class Test {
-
- public static void main(String[] args) throws JsonProcessingException {
- String jsonStr = "{\"userId\":1001,\"userName\":\"iouy\",\"city\":\"chengdu\",\"age\":21,\"sex\":1," +
- "\"phone\":\"15227654561\",\"address\":\"凤凰大街118号\",\"registerTime\":\"2024-03-11 13:11:11\"}";
- ObjectMapper objectMapper = new ObjectMapper();
- String jsonArray = "[{\"userId\":1001,\"userName\":\"iouy\",\"city\":\"chengdu\",\"age\":21,\"sex\":1," +
- "\"phone\":\"15227654561\",\"address\":\"凤凰大街118号\",\"registerTime\":\"2024-03-11 13:11:11\"}," +
- "{\"userId\":1002,\"userName\":\"kdas\",\"city\":\"chengdu\",\"age\":22,\"sex\":0," +
- "\"phone\":\"15127654561\",\"address\":\"凤凰大街111号\",\"registerTime\":\"2022-03-11 12:13:13\"}]";
- // json字符串转换为 java对象
- Person person = objectMapper.readValue(jsonStr, Person.class);
- System.out.println("json字符串转换为 java对象");
- System.out.println(person);
- // json字符串转换为 java map
- Map<String, Object> jsonMap = objectMapper.readValue(jsonStr, Map.class);
- // 或者通过以下两种方式传参
- // Map<String, Object> jsonMap = objectMapper.readValue(jsonStr, objectMapper.getTypeFactory().constructMapType(Map.class, String.class, Object.class));
- // Map<String, Object> jsonMap = objectMapper.readValue(jsonStr, new TypeReference<Map<String, Object>>() {});
- System.out.println("json字符串转换为 java map");
- System.out.println(jsonMap);
- //json数组转换为 java list
- List<Person> personList = objectMapper.readValue(jsonArray, new TypeReference<List<Person>>() {});
- System.out.println("json数组转换为 java list");
- System.out.println(personList);
- // java对象转换为 json字符串
- String jsonStrFromJavaPerson = objectMapper.writeValueAsString(person);
- System.out.println("java对象转换为 json字符串");
- System.out.println(jsonStrFromJavaPerson);
- // 树模型处理
- // 获取 json字符串里某个字段值
- JsonNode jsonNode = objectMapper.readTree(jsonStr);
- System.out.println("获取json字符串里的 city字段值");
- System.out.println(jsonNode.get("city").textValue());
- // 修改 json字符串里的 city值
- ObjectNode objectNode = (ObjectNode) jsonNode;
- objectNode.put("city", "city_change");
- System.out.println("修改city值后的json字符串为");
- System.out.println(objectNode.toString());
- }
-
- public static class Person {
- private long userId;
- private String userName;
- private String city;
- private int age;
- private int sex;
- private String phone;
- private String address;
- private String registerTime;
-
- public Person() {
- }
-
- public long getUserId() {
- return userId;
- }
-
- public void setUserId(long userId) {
- this.userId = userId;
- }
-
- public String getUserName() {
- return userName;
- }
-
- public void setUserName(String userName) {
- this.userName = userName;
- }
-
- public String getCity() {
- return city;
- }
-
- public void setCity(String city) {
- this.city = city;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
-
- public int getSex() {
- return sex;
- }
-
- public void setSex(int sex) {
- this.sex = sex;
- }
-
- public String getPhone() {
- return phone;
- }
-
- public void setPhone(String phone) {
- this.phone = phone;
- }
-
- public String getAddress() {
- return address;
- }
-
- public void setAddress(String address) {
- this.address = address;
- }
-
- public String getRegisterTime() {
- return registerTime;
- }
-
- public void setRegisterTime(String registerTime) {
- this.registerTime = registerTime;
- }
-
- @Override
- public String toString() {
- return "Person{" +
- "userId=" + userId +
- ", userName='" + userName + '\'' +
- ", city='" + city + '\'' +
- ", age=" + age +
- ", sex=" + sex +
- ", phone='" + phone + '\'' +
- ", address='" + address + '\'' +
- ", registerTime='" + registerTime + '\'' +
- '}';
- }
- }
- }

运行结果如下:
- json字符串转换为 java对象
- Person{userId=1001, userName='iouy', city='chengdu', age=21, sex=1, phone='15227654561', address='凤凰大街118号', registerTime='2024-03-11 13:11:11'}
- json字符串转换为 java map
- {userId=1001, userName=iouy, city=chengdu, age=21, sex=1, phone=15227654561, address=凤凰大街118号, registerTime=2024-03-11 13:11:11}
- json数组转换为 java list
- [Person{userId=1001, userName='iouy', city='chengdu', age=21, sex=1, phone='15227654561', address='凤凰大街118号', registerTime='2024-03-11 13:11:11'}, Person{userId=1002, userName='kdas', city='chengdu', age=22, sex=0, phone='15127654561', address='凤凰大街111号', registerTime='2022-03-11 12:13:13'}]
- java对象转换为 json字符串
- {"userId":1001,"userName":"iouy","city":"chengdu","age":21,"sex":1,"phone":"15227654561","address":"凤凰大街118号","registerTime":"2024-03-11 13:11:11"}
- 获取json字符串里的 city字段值
- chengdu
- 修改city值后的json字符串为
- {"userId":1001,"userName":"iouy","city":"city_change","age":21,"sex":1,"phone":"15227654561","address":"凤凰大街118号","registerTime":"2024-03-11 13:11:11"}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。