该篇内容,结合实例介绍使用jackson来操作json数据:
1. 对象(示例为 UserEntity)转 json 数据
2. json 数据 转 对象
3. map 转 json 数据
4. json 数据 转 map
5. List<UserEntity> 转 json 数据
6. json 数据 转 List<UserEntity>
7.接口接收稍微复杂一点的json数据,如何拆解
在pom.xml文件中添加 ,Jackson 依赖:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.11.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.11.1</version> </dependency>
示例中使用到的实体类, UserEntity.java
/** * @Author : JCccc * @CreateTime : 2020/3/18 * @Description : **/ public class UserEntity { private Integer id; private String name; private Integer age; // set get 方法 和 toString 等方法就不粘贴出来了 }
在介绍示例前,先看一张图,使用jackson如:
1. 对象(示例为 UserEntity)转 json 数据
writeValueAsString 方法
public static void main(String[] args) throws JsonProcessingException { UserEntity userEntity=new UserEntity(); userEntity.setId(100); userEntity.setName("JCccc"); userEntity.setAge(18); ObjectMapper mapper = new ObjectMapper(); String jsonString = mapper.writerWithDefaultPrettyPrinter() .writeValueAsString(userEntity); System.out.println(jsonString); }
控制台输出:
格式很漂亮,是因为使用了 :
咱们不需要漂亮,所以后面的我都不使用格式的方法了,转换的时候,只需要 writeValueAsString 就够了 。
2. json 数据 转 对象
readValue 方法
ObjectMapper mapper = new ObjectMapper(); //json字符串转对象 UserEntity userEntityNew = mapper.readValue(jsonString, UserEntity.class); System.out.println(userEntityNew);
控制台输出:
3. map 转 json 数据
ObjectMapper mapper = new ObjectMapper(); Map map=new HashMap(); map.put("A",1); map.put("B",2); map.put("C",3); map.put("D",4); String jsonMap = mapper.writeValueAsString(map); System.out.println(jsonMap);
控制台输出:
4. json 数据 转 map
ObjectMapper mapper = new ObjectMapper(); //json字符串转为Map对象 Map mapNew=mapper.readValue(jsonMap, Map.class); System.out.println(mapNew);
控制台输出:
5. List<UserEntity> 转 json 数据
ObjectMapper mapper = new ObjectMapper(); UserEntity userEntity1=new UserEntity(); userEntity1.setId(101); userEntity1.setName("JCccc1"); userEntity1.setAge(18); UserEntity userEntity2=new UserEntity(); userEntity2.setId(102); userEntity2.setName("JCccc2"); userEntity2.setAge(18); UserEntity userEntity3=new UserEntity(); userEntity3.setId(103); userEntity3.setName("JCccc3"); userEntity3.setAge(18); List<UserEntity> userList=new ArrayList<>(); userList.add(userEntity1); userList.add(userEntity2); userList.add(userEntity3); String jsonList = mapper.writeValueAsString(userList); System.out.println(jsonList);
控制台输出:
6. json 数据 转 List<UserEntity>
ObjectMapper mapper = new ObjectMapper(); List<UserEntity> userListNew= mapper.readValue(jsonList,new TypeReference<List<UserEntity>>(){}); System.out.println(userListNew.toString());
控制台输出:
7.接口接收稍微复杂一点的json数据,如何拆解
现在模拟了一串稍微复杂一些的json数据,如:
{ "msg": "success", "data": [ { "id": 101, "name": "JCccc1", "age": 18 }, { "id": 102, "name": "JCccc2", "age": 18 }, { "id": 103, "name": "JCccc3", "age": 18 } ], "status": 200 }
那么我们接口接收时,如果操作呢?
1.直接使用 @RequestBody Map map 接收,里面如果嵌套list,那就拿出对应的value转list,然后该怎么拿怎么拿。
@PostMapping("testJackson") public void testJackson(@RequestBody Map map) { System.out.println(map); String msg = String.valueOf(map.get("msg")); System.out.println(msg); List dataList = (List) map.get("data"); System.out.println(dataList.toString()); }
2.使用字符串接收json数据 @RequestBody String jsonStr , 那么就使用jackson把这个json数据转为Map,然后该怎么拿怎么拿。
@PostMapping("testJackson") public void testJackson(@RequestBody String jsonStr) throws JsonProcessingException { System.out.println(jsonStr); ObjectMapper mapper = new ObjectMapper(); Map map = mapper.readValue(jsonStr, Map.class); String msg = String.valueOf(map.get("msg")); System.out.println(msg); String status = String.valueOf(map.get("status")); System.out.println(status); List dataList = (List) map.get("data"); System.out.println(dataList.toString()); }
好的,该篇就到此。
ps: 为啥我要科普这个jackson的使用么?这个算是基本的操作了,原本我经手的很多项目都用到的fastjson ,其实使用起来也杠杠的。
除了jackson是springboot web包的内部解析框架外,其实还有一些原因。
懂的人自然会明白。