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

1、ObjectMapper与JSONObject比较

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

2、目前来看,Jackson社区相对活跃,Spring MVC和Spring 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、测试结果展示

869bf45b52e24c25a3b23eaa12bec90c.png

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、测试结果展示

6222a958cbf945be9edb19a29b59fd7a.png

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、测试结果展示

2432ae788b5545e2ae495f3c01b843ef.png

3、如果不需要JSON与其他转化,而是直接获取

使用readTree,通过节点树的方式直接获取JSON属性对应的值

使用链接:https://blog.youkuaiyun.com/tangshiyilang/article/details/134326627

4、在Springboot工程中,通过配置的方式,配置ObjectMapper配置

方便使用,一次性配置,会在springboot工程启动的时候自动获取配置

@Configuration
public class ObjectMapperConfig {

    @Bean("objectMapper")
    public ObjectMapper getObjectMapper(){
        ObjectMapper  mapper = new ObjectMapper();
        //属性为NULL 不序列化
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        //属性为默认值不序列化
        mapper.setSerializationInclusion(JsonInclude.Include.NON_DEFAULT);

        //反序列化时,遇到未知属性不报错
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

        //如果是空对象的时候,不抛异常
        mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

        //修改序列化后日期格式
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));

        return mapper;
    }


}

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

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

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

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

解决博客地址:https://blog.youkuaiyun.com/tangshiyilang/article/details/134275584

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

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

解决博客地址:https://blog.youkuaiyun.com/tangshiyilang/article/details/134281368

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

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

解决博客地址:https://blog.youkuaiyun.com/tangshiyilang/article/details/134281585

5.4、对象转化成JSON字符串,如果属性值为null,不被序列化

解决博客地址:解析JSON字符串:属性值为null的时候不被序列化-优快云博客

6、源码下载

源码需要积分

https://download.youkuaiyun.com/download/tangshiyilang/88512083

### 回答1: Spring Boot可以使用Jackson解析JSON字符串Jackson是一个流行的Java,用于将Java对象序列化为JSON格式,以及将JSON格式反序列化为Java对象。在Spring Boot中,可以使用JacksonObjectMapper类来解析JSON字符串。可以使用以下代码来解析JSON字符串: ```java ObjectMapper objectMapper = new ObjectMapper(); MyObject myObject = objectMapper.readValue(jsonString, MyObject.class); ``` 其中,MyObject是一个Java类,它的属性与JSON字符串中的键值对对应。jsonString是要解析JSON字符串。使用readValue方法将JSON字符串转换为Java对象。 ### 回答2: Spring Boot是一个Java框架,可以通过它来解析JSON字符串Spring Boot提供了一个非常方便的方式来处理JSON数据,它可以用来创建RESTful API和微服务。 在Spring Boot中,我们可以使用Jackson解析和生成JSON数据。Jackson是一个用于JSON数据处理的高性能,它提供了一些强大的功能,包括独特的JSON处理器和缓存支持等。使用Jackson解析JSON字符串很简单,我们只需要在pom.xml文件中添加Jackson依赖即可。 在代码中,我们可以使用ObjectMapper类来解析JSON字符串ObjectMapper类是Jackson的主要类之一,它提供了一些方法来解析JSON数据,例如:readValue()方法。我们可以将JSON字符串作为参数传递给readValue()方法,并指定要解析的对象类型,最后就可以将JSON字符串转换成Java对象。 例如,我们可以定义一个Java对象如下: ``` public class Person { private String name; private int age; // getter and setter } ``` 然后我们可以使用以下代码将JSON字符串转换为Person对象: ``` ObjectMapper objectMapper = new ObjectMapper(); String jsonStr = "{\"name\":\"Tom\", \"age\":25}"; Person person = objectMapper.readValue(jsonStr, Person.class); ``` 这个例子中,我们首先创建了一个ObjectMapper对象,然后定义了一个JSON字符串。最后,我们使用readValue()方法将JSON字符串转换为Person对象。在readValue()方法中,我们将JSON字符串作为第一个参数传递,将Person类作为第二个参数传递。 以上就是使用Spring Boot解析JSON字符串的简单步骤。在实际应用中,我们可以在Controller中定义RESTful API来接收JSON数据,并使用JacksonJSON字符串转换为Java对象。 ### 回答3: Spring Boot 是一款提高开发效率的框架,它内置了许多常用的功能,其中就包括解析 JSON 字符串JSON 是一种轻量级、易于读写的数据交换格式,逐渐成为了互联网上数据传输的标准格式。 Spring Boot 提供了许多和工具来处理 JSON,最常用的是 Jackson,它是一个功能强大且广泛使用的 JSON 处理。 首先我们需要在 pom.xml 中引入 Jackson 的依赖: ``` <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> ``` 接着,我们可以使用 ObjectMapper 类来解析 JSON。 ```java ObjectMapper mapper = new ObjectMapper(); String jsonString = "{\"name\": \"张三\", \"age\": 18}"; try { // 将 JSON 字符串解析成一个对象 User user = mapper.readValue(jsonString, User.class); System.out.println(user.getName()); } catch (JsonProcessingException e) { e.printStackTrace(); } ``` 在这个例子中,我们将一个 JSON 字符串解析成了一个 User 对象。JsonProcessingException 异常是 Jackson 中的一个异常类,它是用来处理 JSON 解析异常的。 如果我们需要将一个对象序列化成 JSON 字符串,也很容易实现。 ```java User user = new User("张三", 18); try { // 将一个对象序列化成 JSON 字符串 String jsonString = mapper.writeValueAsString(user); System.out.println(jsonString); } catch (JsonProcessingException e) { e.printStackTrace(); } ``` 在这个例子中,我们将一个 User 对象序列化成了一个 JSON 字符串。 除了 ObjectMapper 外,Spring Boot 还提供了许多其他的 JSON 处理工具,如 Gson、FastJson 等。选择哪种工具取决于具体情况,我们可以根据需求来选择最适合的工具来处理 JSON 数据。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾林小妖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值