Springboot中解析JSON字符串(jackson库ObjectMapper解析JSON字符串)

1、ObjectMapper与JSONObject比较

1、ObjectMapper属于jackson库的一部分,JSONObject属于alibaba的fastjson,两者各有优劣,可根据自己的系统环境选择使用哪种技术。

2、目前来看,Jackson社区相对活跃,Spring MVCSpring Boot都默认使用Jackson

核心主要有三个部分:

jackson-core(核心包)、jackson-databind(数据绑定包)、jackson-annotations(注解包)

3、依赖包不同

//JSONObject依赖包

<dependency>

    <groupId>com.alibaba.fastjson2</groupId>

    <artifactId>fastjson2</artifactId>

    <version>2.0.42</version>

</dependency>

//ObjectMapper依赖包

<dependency>

    <groupId>com.fasterxml.jackson.core</groupId>

    <artifactId>jackson-databind</artifactId>

    <version>2.14.2</version>

</dependency>

2、ObjectMapper使用概述

ObjectMapper通过writeValue()实现序列化,通过readValue()实现反序列化。

ObjectMapper通过Feature枚举类,初始化了很多的默认配置。

2.1、工程的pom.xml导包信息

spring-boot-starter-web包中包含了jackson包,不需要单独导入

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.17</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.txc</groupId>
    <artifactId>objectmapper</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>objectmapper</name>
    <description>objectmapper</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

2.2、创建案例中的测试对象

案例中使用lombok注解生成get和set方法,也可以直接写get和set方法
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Student {
    private String stu_id;
    private String stu_name;
}

2.3、对象和JSON相互转化

2.3.1、测试代码

/**
 * 实现对象和JSON之间互转
 */
@RequestMapping("/jsonObjectChange")
@ResponseBody
public  void  jsonObjectChange() throws Exception{
    ObjectMapper mapper = new ObjectMapper();
    String param = "{\"stu_id\":\"1001\",\"stu_name\":\"晓春\",\"stu_sex\":\"男\",\"stu_age\":\"34\",\"stu_addr\":\"安徽合肥\",\"stu_pwd\":\"123456\"}";
    //将字符串转换为对象—反序列化过程
    Student student = mapper.readValue(param, Student.class);
    System.out.println("===json转对象==="+student.toString());
    //将对象转化成JSON—序列化过程
    String  json = mapper.writeValueAsString(student);
    System.out.println("===对象转json==="+json);
}

2.3.2、测试结果展示

2.4、集合和JSON像话转化

2.4.1、测试代码

/**
 * 集合和JSON相互转化
 */
@RequestMapping("/listAndJSONChange")
@ResponseBody
public void  arrayToObject() throws Exception{
    Student student1=new Student("1001","晓春1","男","34","安徽合肥","123456");
    Student student2=new Student("1002","晓春2","男","34","安徽合肥","123456");
    ObjectMapper mapper = new ObjectMapper();
    //集合转json
    String param = mapper.writeValueAsString(Arrays.asList(student1,student2));
    System.out.println("==集合转json=="+param);
    //数组json转化成集合
    List<Student> list= mapper.readValue(param, List.class);
    System.out.println("==数组json转集合=="+list);
}

2.4.2、测试结果展示

2.5、Map和JSON相互转化

2.5.1、测试代码

/**
 * map和json相互转化
 */
@RequestMapping("/mapAndJsonChange")
@ResponseBody
public void  mapAndJsonChange() throws Exception{
    ObjectMapper mapper = new ObjectMapper();
    Map<String, Object> map = new HashMap<>();
    map.put("id", "1001");
    map.put("name","晓春");
    map.put("student", new Student("6","6","6","6","6","6"));
    String param = mapper.writeValueAsString(map);
    System.out.println("===map转json==="+param);
    Map<String, Object> resultMap = mapper.readValue(param, Map.class);
    System.out.println("===json转map==="+resultMap);
}

2.5.2、测试结果展示

3、常见的ObjectMapper配置及问题总结

3.1、如果生成的JSON使用的是单引号,解析会失败

问题的json样式:String param="{'stu_id':'1001','stu_name':'晓春'}";

默认支持的是双引号,在很多的环境中都是。

解决博客地址:https://blog.csdn.net/tangshiyilang/article/details/134275584

3.2、生成的JSON字符串属性没有双引号或者单引号问题

问题json样式:String param="{stu_id:\"1001\",stu_name:\"晓春\"}";

解决博客地址:https://blog.csdn.net/tangshiyilang/article/details/134281368

3.3、JSON字符串转化对象,JSON中的属性名称与对象属性名称不同问题

问题描述:JSON字符串中出现了属性名称与对象中的名称不一致的情况,而造成的解析错误。

解决博客地址:https://blog.csdn.net/tangshiyilang/article/details/134281585

4、源码下载

源码需要积分

https://download.csdn.net/download/tangshiyilang/88512083

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/120038.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

号牌模拟数据生成

说明 自己开发的测试数据生成工具&#xff0c;用于生成数据训练对应模型。 项目 效果

小菜React

1、Unterminated regular expression literal, 对于函数就写.ts&#xff0c;有dom元素就写.tsx 2、 The requested module /src/components/setup.tsx?t1699255799463 does not provide an export named Father export default useStore默认导出的钩子&#xff0c;组件引入的…

AndroidStudio 运行报错:Invalid keystore format

AndroidStudio 运行报错&#xff1a;Invalid keystore format 把这玩意儿删了重新打开Android Studio运行一下就好了&#xff01;&#xff01;&#xff01;

Linux中su鉴定故障解决办法

su鉴定故障问题 刚装完Linux的虚拟机&#xff0c;在终端中输入su命令&#xff0c;输入密码后出现鉴定故障。 原因是在安装linux系统时没有给root用户设置密码&#xff0c;重新设置密码即可。 解决步骤如下 设置root密码 sudo passwd root —>如果没有登录密码 则提示输入…

初识微服务技术栈

认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构&#xff0c;这些架构之间有怎样的差别呢&#xff1f; 导学&#xff1a; 了解微服务的优缺点&#xff1b;了解微服务架构的演变过程&am…

安装RabbitMQ

安装RabbitMQ 下载需要的两个包 # 这直接就可以安装了&#xff0c;下面 ‘上传对应的rmp包’ 操作 [rootrabbitmq-1 ~]# curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash [rootrabbitmq-1 ~]# yum install erlang-21.3.8.2…

第四章IDEA操作Maven

文章目录 创建父工程开启自动导入配置Maven信息创建Java模块工程创建 Web 模块工程 在IDEA中执行Maven命令直接执行手动输入 在IDEA中查看某个模块的依赖信息工程导入来自版本控制系统来自工程目录 模块导入情景重现导入 Java 类型模块 导入 Web 类型模块 创建父工程 开启自动导…

STM32存储左右互搏 SPI总线读写FLASH W25QXX

STM32存储左右互搏 SPI总线读写FLASH W25QXX FLASH是常用的一种非易失存储单元&#xff0c;W25QXX系列Flash有不同容量的型号&#xff0c;如W25Q64的容量为64Mbit&#xff0c;也就是8MByte。这里介绍STM32CUBEIDE开发平台HAL库操作W25Q各型号FLASH的例程。 W25QXX介绍 W25QX…

10个python爬虫入门实例

昨天带伙伴萌学习python爬虫&#xff0c;准备了几个简单的入门实例 涉及主要知识点: web是如何交互的requests库的get、post函数的应用response对象的相关函数&#xff0c;属性python文件的打开&#xff0c;保存 代码中给出了注释&#xff0c;并且可以直接运行哦 如何安装requ…

栈(定义,基本操作,顺序存储,链式存储)

目录 1.栈的定义1.重要术语2.特点 2.栈的基本操作3.栈的顺序存储1.顺序栈的定义2.基本操作1.初始化2.进栈3.出栈4.读栈顶 3.共享栈 4.栈的链式存储 1.栈的定义 栈( Stack&#xff09;是只允许在一端进行插入或删除操作的线性表。 一种受限的线性表&#xff0c;只能在栈顶进行插…

服务器数据库中了elbie勒索病毒怎么办,elbie勒索病毒解密,数据恢复

网络技术的不断成熟&#xff0c;为企业的生产运营提供了强有力的支撑&#xff0c;但是&#xff0c;随之而来的网络安全威胁也不断增加。云天数据恢复中心陆陆续续接到很多企业的求助&#xff0c;企业的服务器数据库e遭到了elbie勒索病毒攻击&#xff0c;导致企业计算机系统瘫痪…

AI:63-基于Xception模型的服装分类

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

GEE: print 函数和 console.log 函数的区别

作者&#xff1a;CSDN _养乐多_ 本文记录了 print() 函数和 console.log() 函数的区别。print 函数是 GEE 中的内置函数&#xff0c;可以打印各种数据类型&#xff0c;包括数字、字符串、图像、特征集等&#xff0c;主要目的是帮助你调试代码和查看输出结果&#xff0c;以便更…

极智AI | Whole-Body Multi-Person人体姿态估计之AlphaPose

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文来介绍一下 Whole-Body Multi-Person人体姿态估计之AlphaPose。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq Whole-Body、…

总决赛再获佳绩!开源网安斩获CCIA2023年网络安全优秀创新成果大赛总决赛大奖

​近日&#xff0c;由中央网信办网络安全协调局指导&#xff0c;中国网络安全产业联盟&#xff08;CCIA&#xff09;主办的“2023年网络安全优秀创新成果大赛”总决赛及颁奖典礼在武汉成功举办。开源网安创新产品“实时应用自我防护平台&#xff08;RASP&#xff09;”从200余家…

Google Chrome 浏览器 119.0.6045.106 版本提示 STATUS_INVALID_IMAGE_HASH 崩溃

问题 今天更新 Google Chrome 浏览器到 119.0.6045.106 版本&#xff0c;然后访问页面不是空白&#xff0c;就是页面崩溃了 解决方案 我在网上找了几种&#xff0c;下面这个方式符合&#xff0c;能解决我的问题&#xff0c;就是在快捷方式的属性那里&#xff0c;找到目标给它…

【编程语言发展史】Unity开发语言的历史发展

Unity开发前期版本时&#xff0c;使用的是一种名为UnityScript的类似JavaScript的语言。然而&#xff0c;随着时间的推移&#xff0c;开发者社区大多数人都倾向于使用C#进行开发&#xff0c;Unity决定将重点放在C#上&#xff0c;因为C#具有更强大的生态系统、更好的性能和更广泛…

窗函数法设计FIR中,如何选择窗函数和滤波器阶数N

窗函数法设计FIR中&#xff0c;如何选择窗函数和滤波器阶数N 1、概述 在用窗函数法设计FIR滤波器时&#xff0c;给出了滤波器要求的具体指标&#xff0c;包括通带频率fp、阻带频率fs、通带波纹Rp 和阻带衰减As 等&#xff0c;有了这些指标后&#xff0c;是否什么窗函数都可以选…

【JS】scrollTop+scrollHeight+clientTop+clientHeight+offsetTop+offsetHeight

scrollTop、scrollHeight、clientTop、clientHeight、offsetTop以及offsetHeight 1. scrollTop 与 scrollHeight 1.1 scrollTop scrollTop 是这六个属性中唯一一个可写的属性。 Element.scrollTop 属性可以获取或设置一个元素的内容垂直滚动的像素数。 一个元素的 scrollT…

Alfred 5 for mac(最好用的苹果mac效率软件)中文最新版

Alfred 5 Mac是一款非常实用的工具&#xff0c;它可以帮助用户更加高效地使用Mac电脑。用户可以学会使用快捷键、全局搜索、快速启动应用程序、使用系统维护工具、快速复制粘贴文本以及自定义设置等功能&#xff0c;以提高工作效率。 Alfred for Mac 的一些主要功能包括&#…