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='猫'}]}
      
目录
相关文章
|
24天前
|
运维
【运维基础知识】用dos批处理批量替换文件中的某个字符串(本地单元测试通过,部分功能有待优化,欢迎指正)
该脚本用于将C盘test目录下所有以t开头的txt文件中的字符串“123”批量替换为“abc”。通过创建批处理文件并运行,可实现自动化文本替换,适合初学者学习批处理脚本的基础操作与逻辑控制。
119 56
|
2月前
|
XML JSON 前端开发
json字符串CSS格式化
完成以上步骤后,你便能在网页中看到格式化后的JSON数据,它们将按照CSS定义的样式进行展示,使数据更易于阅读和理解。通过有效地结合JSON和CSS,你可以创建出更加丰富且易于交互的网页内容。
184 64
|
30天前
|
XML Java Maven
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
44 7
|
1月前
|
JSON 前端开发 JavaScript
json字符串如何转为list对象?
json字符串如何转为list对象?
122 7
|
2月前
|
测试技术 程序员
关于字符串为空的几个性能测试
本文通过实验对比了两种字符串赋值方式(`string str=&quot;&quot;;` 和 `string str=string.Empty;`)及五种判断字符串是否为空的方法的性能差异。实验结果显示,使用 `string.Empty` 的赋值方式性能更优,且在判断字符串是否为空时,`.Length==0` 方法最为高效,其次是 `str.Equals(&quot;&quot;)` 和 `str==string.Empty` 等方法。文章提供了详细的测试代码和结果分析。
18 3
关于字符串为空的几个性能测试
|
1月前
|
JSON JavaScript 前端开发
js如何格式化一个JSON对象?
js如何格式化一个JSON对象?
50 3
|
24天前
|
JSON 数据格式 计算机视觉
Opencv实用笔记(一): 获取并绘制JSON标注文件目标区域(可单独保存目标小图)
本文介绍了如何使用OpenCV和Python根据JSON标注文件获取并绘制目标区域,同时可将裁剪的图像单独保存。通过示例代码,展示了如何读取图片路径、解析JSON标注、绘制标注框并保存裁剪图像的过程。此外,还提供了相关的博客链接,供读者进一步学习。
25 0
|
2月前
|
XML JSON JavaScript
JSON对象的stringify()和parse()方法使用
本文阐述了JSON对象的`stringify()`和`parse()`方法的用法,包括如何将JavaScript对象转换为JSON字符串,以及如何将JSON字符串解析回JavaScript对象,并讨论了转换过程中需要注意的事项。
JSON对象的stringify()和parse()方法使用
|
2月前
|
JSON 前端开发 中间件
React读取properties配置文件转化为json对象并使用在url地址中
本文介绍了如何在React项目中读取properties配置文件,将其内容转化为JSON对象,并在请求URL地址时使用这些配置。文章详细说明了异步读取文件、处理字符串转换为JSON对象的过程,并提供了一个封装函数,用于在发起请求前动态生成配置化的URL地址。
60 1
|
2月前
|
XML JSON 前端开发
json字符串CSS格式化
json字符串CSS格式化
51 4