JSON字符串直接转换为目标对象,并测试是否是深度转换

简介: JSON字符串直接转换为目标对象,并测试是否是深度转换

@[TOC]

  • 提前说结果,可以深度转换对象和数组JSON字符串。

    1 依赖

          <!-- 阿里JSON解析器 -->
          <dependency>
              <groupId>com.alibaba.fastjson2</groupId>
              <artifactId>fastjson2</artifactId>
              <version>2.0.25</version>
          </dependency>
    

    2 实体类

  • Person类

    /**
    * @Author:胡云峰
    * @Date:2023/4/14 16:27
    */
    public class Person {
         
    
      private String name;
    
      private int age;
    
      private String sex;
    
      private Date birthDate;
    
      private String avatar;
    
      private String car;
    
      private List<Pet> petList;
    
      public String getName() {
         
          return name;
      }
    
      public void setName(String name) {
         
          this.name = name;
      }
    
      public int getAge() {
         
          return age;
      }
    
      public void setAge(int age) {
         
          this.age = age;
      }
    
      public Date getBirthDate() {
         
          return birthDate;
      }
    
      public void setBirthDate(Date birthDate) {
         
          this.birthDate = birthDate;
      }
    
      public String getAvatar() {
         
          return avatar;
      }
    
      public void setAvatar(String avatar) {
         
          this.avatar = avatar;
      }
    
      public List<Pet> getPetList() {
         
          return petList;
      }
    
      public void setPetList(List<Pet> petList) {
         
          this.petList = petList;
      }
    
      public String getSex() {
         
          return sex;
      }
    
      public void setSex(String sex) {
         
          this.sex = sex;
      }
    
      public String getCar() {
         
          return car;
      }
    
      public void setCar(String car) {
         
          this.car = car;
      }
    
      @Override
      public String toString() {
         
          return "Person{" +
                  "name='" + name + '\'' +
                  ", age=" + age +
                  ", sex='" + sex + '\'' +
                  ", birthDate=" + birthDate +
                  ", avatar='" + avatar + '\'' +
                  ", car='" + car + '\'' +
                  ", petList=" + petList +
                  '}';
      }
    }
    
  • Car 类

    /**
    * @Author:胡云峰
    * @Date:2023/4/20 15:36
    */
    public class Car {
         
    
      private String carName;
    
      private String type;
    
      public String getCarName() {
         
          return carName;
      }
    
      public void setCarName(String carName) {
         
          this.carName = carName;
      }
    
      public String getType() {
         
          return type;
      }
    
      public void setType(String type) {
         
          this.type = type;
      }
    
      @Override
      public String toString() {
         
          return "Car{" +
                  "carName='" + carName + '\'' +
                  ", type='" + type + '\'' +
                  '}';
      }
    }
    
  • Pet 类

    /**
    * @Author:胡云峰
    * @Date:2023/4/14 16:33
    */
    public class Pet {
         
    
      private String petName;
    
      private String category;
    
      public Pet() {
         
      }
    
      public Pet(String petName, String category) {
         
          this.petName = petName;
          this.category = category;
      }
    
      public String getPetName() {
         
          return petName;
      }
    
      public void setPetName(String petName) {
         
          this.petName = petName;
      }
    
      public String getCategory() {
         
          return category;
      }
    
      public void setCategory(String category) {
         
          this.category = category;
      }
    
      @Override
      public String toString() {
         
          return "Pet{" +
                  "petName='" + petName + '\'' +
                  ", category='" + category + '\'' +
                  '}';
      }
    }
    

    3 测试用例

  • 单个对象
    {
         
      "name": "张三",
      "age": 16,
      "sex": "男"
    }
    
  • 数组对象
    [
      {
         
      "name": "张三",
      "age": 16,
      "sex": "男"
      },
      {
         
      "name": "李四",
      "age": 18,
      "sex": "女"
      }
    ]
    
  • 对象包含对象
    {
         
      "name": "李四",
      "age": 18,
      "sex": "女",
      "car": {
         
          "carName": "桑塔纳",
          "type": "大众"
      }
    }
    
  • 对象包含数组
    {
         
      "name": "李四",
      "age": 18,
      "sex": "女",
      "car": {
         
          "carName": "桑塔纳",
          "type": "大众"
      },
      "petList": [
          {
         
              "petName": "乐乐",
              "category": "狗"
          },
          {
         
              "petName": "欢欢",
              "category": "猫"
          }
      ]
    }
    

    4 测试

    ```java
    import com.alibaba.fastjson2.JSONArray;
    import com.alibaba.fastjson2.JSONObject;
    import com.alibaba.fastjson2.JSONReader;
    import com.yunfeng.generatepdfweb.domain.Person;

import java.util.List;

/**

  • @Author:胡云峰
  • @Date:2023/4/20 15:09
    */
    public class TestFastJson2 {

    /**

    • 单个对象
      */
      private static final String jsonObjectStr = "{\"name\": \"张三\",\"age\": 16,\"sex\": \"男\"}";

      /**

    • 对象数组
      */
      private static final String jsonArrayStr = "[\n" +

       "{\"name\": \"张三\",\"age\": 16,\"sex\": \"男\"},\n" +
       "{\"name\": \"李四\",\"age\": 18,\"sex\": \"女\"}\n" +
       "]";
      

      /**

    • 测试深度转换对象
      */
      private static final String deepCopyObject = "{\n" +

       "    \"name\": \"张三\",\n" +
       "    \"age\": 16,\n" +
       "    \"sex\": \"男\",\n" +
       "    \"car\": {\n" +
       "        \"carName\": \"桑塔纳\",\n" +
       "        \"type\": \"大众\"\n" +
       "    }\n" +
       "}";
      

      /**

    • 测试深度转换数组对象
      */
      private static final String deepCopyList = "{\n" +

       "    \"name\": \"张三\",\n" +
       "    \"age\": 16,\n" +
       "    \"sex\": \"男\",\n" +
       "    \"car\": {\n" +
       "        \"carName\": \"桑塔纳\",\n" +
       "        \"type\": \"大众\"\n" +
       "    },\n" +
       "    \"petList\": [\n" +
       "                   {\n" +
       "                        \"petName\": \"乐乐\",\n" +
       "                        \"category\": \"狗\"\n" +
       "                   }, \n" +
       "                   {\n" +
       "                        \"petName\": \"欢欢\",\n" +
       "                        \"category\": \"猫\"\n" +
       "                   }\n" +
       "                ]\n" +
       "}";
      

      public static void main(String[] args) {
      // 1、单个对象的转换,自动忽略不匹配的
      // 方式一:字符串转换为JSONObject,JSONObject再转换为目标对象(Person)
      JSONObject jsonObject = JSONObject.parseObject(jsonObjectStr);
      Person person = jsonObject.toJavaObject(Person.class, JSONReader.Feature.IgnoreAutoTypeNotMatch);
      System.out.println("person = " + person);
      // 方式二:直接字符串转换为目标对象(Person)
      Person person1 = JSONObject.parseObject(jsonObjectStr, Person.class);
      System.out.println("person1 = " + person1);

      // 2、数组对象的转换,自动忽略不匹配的
      // 方式一:字符串转换为JSONArray,JSONArray再转换为目标list
      JSONArray jsonArray = JSONArray.parse(jsonArrayStr);
      List personList = jsonArray.toJavaList(Person.class, JSONReader.Feature.IgnoreAutoTypeNotMatch);
      System.out.println("personList = " + personList);
      // 方式二:直接字符串转化为目标list
      List personList1 = JSONArray.parseArray(jsonArrayStr, Person.class);
      System.out.println("personList1 = " + personList1);

      // 3、测试是否是深度转换
      Person deepPerson = JSONObject.parseObject(deepCopyObject, Person.class);
      // 结果显示对象可以深度转换对象
      System.out.println("deepPerson = " + deepPerson);

      // 4、测试List是否可以深度转换
      Person deepPerson2 = JSONObject.parseObject(deepCopyList, Person.class);
      // 结果显示对象可以深度转换List
      System.out.println("deepPerson2 = " + deepPerson2);
      }
      }

      # 5 结果
      ```powershell
      person = Person{name='张三', age=16, sex='男', birthDate=null, avatar='null', car='null', petList=null}
      person1 = Person{name='张三', age=16, sex='男', birthDate=null, avatar='null', car='null', petList=null}
      personList = [Person{name='张三', age=16, sex='男', birthDate=null, avatar='null', car='null', petList=null}, Person{name='李四', age=18, sex='女', birthDate=null, avatar='null', car='null', petList=null}]
      personList1 = [Person{name='张三', age=16, sex='男', birthDate=null, avatar='null', car='null', petList=null}, Person{name='李四', age=18, sex='女', birthDate=null, avatar='null', car='null', petList=null}]
      deepPerson = Person{name='张三', age=16, sex='男', birthDate=null, avatar='null', car='{"carName":"桑塔纳","type":"大众"}', petList=null}
      deepPerson2 = Person{name='张三', age=16, sex='男', birthDate=null, avatar='null', car='{"carName":"桑塔纳","type":"大众"}', petList=[Pet{petName='乐乐', category='狗'}, Pet{petName='欢欢', category='猫'}]}
      
目录
相关文章
|
JSON IDE Java
鸿蒙开发:json转对象插件回来了
首先,我重新编译了插件,进行了上传,大家可以下载最新的安装包进行体验了,还是和以前一样,提供了在线版和IDE插件版,两个选择,最新的版本,除了升级了版本,兼容了最新的DevEco Studio ,还做了一层优化,就是针对嵌套对象和属性的生成,使用方式呢,一年前的文章中有过详细的概述,这里呢也简单介绍一下。
458 4
鸿蒙开发:json转对象插件回来了
|
JSON 人工智能 Go
在Golang中序列化JSON字符串的教程
在Golang中,使用`json.Marshal()`可将数据结构序列化为JSON格式。若直接对JSON字符串进行序列化,会因转义字符导致错误。解决方案包括使用`[]byte`或`json.RawMessage()`来避免双引号被转义,从而正确实现JSON的序列化与反序列化。
799 7
|
运维
【运维基础知识】用dos批处理批量替换文件中的某个字符串(本地单元测试通过,部分功能有待优化,欢迎指正)
该脚本用于将C盘test目录下所有以t开头的txt文件中的字符串“123”批量替换为“abc”。通过创建批处理文件并运行,可实现自动化文本替换,适合初学者学习批处理脚本的基础操作与逻辑控制。
1542 56
|
JSON API 数据格式
淘系等商品评论Json数据格式参考,API接口测试
通过以上示例和说明,你可以了解淘系商品评论的JSON数据结构和如何使用相关API接口获取评论数据。在实际操作中,你需要参考具体的API接口文档和开放平台的相关说明进行配置和调用。
|
JSON JavaScript 前端开发
处理从API返回的JSON数据时返回Unicode编码字符串怎么处理
在处理API返回的JSON数据时,遇到类似`\u7f51\u7edc\u8fde\u63a5\u9519\u8bef`的Unicode编码字符串,可使用JavaScript内置方法转换为可读文字。主要方法包括:1. 使用`JSON.parse`自动解析;2. 使用`decodeURIComponent`和`escape`组合解码;3. 在API调用中直接处理响应数据。这些方法能有效处理多语言内容,确保正确显示非ASCII字符。
|
XML Java Maven
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
494 7
|
JSON 前端开发 JavaScript
json字符串如何转为list对象?
json字符串如何转为list对象?
2407 7
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
1645 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
750 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
JSON JavaScript 前端开发
js如何格式化一个JSON对象?
js如何格式化一个JSON对象?
804 3

热门文章

最新文章