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

2023-11-08 12:28

本文主要是介绍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();//集合转jsonString 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

这篇关于Springboot中解析JSON字符串(jackson库ObjectMapper解析JSON字符串)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/369847

相关文章

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直