Springboot 使用Jackson 操作 json数据,各场景实例
该篇内容,结合实例介绍使用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包的内部解析框架外,其实还有一些原因。
懂的人自然会明白。