当前位置: 首页 > news >正文

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包的内部解析框架外,其实还有一些原因。

 

懂的人自然会明白。

相关文章:

  • Springboot 整合Websocket+Stomp协议+RabbitMQ做消息代理 实例教程
  • Java 将List<String> 转为以逗号 ‘,’ 拼接的字符串
  • Java 基于原生HttpURLConnection ,调用GET 和 POST请求 工具类
  • Java 识别请求来自移动端还是电脑端
  • MySql 别犯糊涂了! LEFT JOIN 的 ON 后接上筛选条件,多个条件会出事!
  • 微服务 分布式事务解决方案
  • MySql 索引失效、回表解析
  • Springboot 超简单实现在线预览,Word文档 doc、xlsx、pdf、txt等
  • Java 结合实例学会使用 静态代理、JDK动态代理、CGLIB动态代理
  • Springboot 实现 上传、下载 以及解决必须项目重启才能访问资源的问题
  • JAVA 获取微信用户信息,看完这篇你必须得学会
  • Java 求助! 为什么我拿不到错误信息,e.getMessage()
  • Java 获取范围内的随机整数
  • Xshell6 提示更新,使用不了! 解决方案
  • Springboot 前端请求的每次sessionid 都不同
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Android Volley源码解析
  • Angular 4.x 动态创建组件
  • Angular 响应式表单 基础例子
  • echarts的各种常用效果展示
  • ECS应用管理最佳实践
  • Intervention/image 图片处理扩展包的安装和使用
  • Java知识点总结(JavaIO-打印流)
  • mac修复ab及siege安装
  • node学习系列之简单文件上传
  • vagrant 添加本地 box 安装 laravel homestead
  • webpack4 一点通
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 官方解决所有 npm 全局安装权限问题
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前嗅ForeSpider采集配置界面介绍
  • 悄悄地说一个bug
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 设计模式走一遍---观察者模式
  • 使用 QuickBI 搭建酷炫可视化分析
  • 用Visual Studio开发以太坊智能合约
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #Lua:Lua调用C++生成的DLL库
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (C语言)二分查找 超详细
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (多级缓存)缓存同步
  • (九)c52学习之旅-定时器
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (三分钟)速览传统边缘检测算子
  • (实战篇)如何缓存数据
  • (四) 虚拟摄像头vivi体验
  • (四)Controller接口控制器详解(三)
  • (转)可以带来幸福的一本书