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='猫'}]}
      
目录
相关文章
|
29天前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
30天前
|
JSON JavaScript 前端开发
JavaScript实现字符串转json对象的方法
JavaScript实现字符串转json对象的方法
|
9天前
|
XML JSON 前端开发
json字符串CSS格式化
完成以上步骤后,你便能在网页中看到格式化后的JSON数据,它们将按照CSS定义的样式进行展示,使数据更易于阅读和理解。通过有效地结合JSON和CSS,你可以创建出更加丰富且易于交互的网页内容。
148 64
|
2天前
|
测试技术 程序员
关于字符串为空的几个性能测试
本文通过实验对比了两种字符串赋值方式(`string str=&quot;&quot;;` 和 `string str=string.Empty;`)及五种判断字符串是否为空的方法的性能差异。实验结果显示,使用 `string.Empty` 的赋值方式性能更优,且在判断字符串是否为空时,`.Length==0` 方法最为高效,其次是 `str.Equals(&quot;&quot;)` 和 `str==string.Empty` 等方法。文章提供了详细的测试代码和结果分析。
9 3
关于字符串为空的几个性能测试
|
4天前
|
XML JSON 前端开发
json字符串CSS格式化
json字符串CSS格式化
15 4
|
23天前
|
XML JavaScript 测试技术
Web自动化测试框架(基础篇)--HTML页面元素和DOM对象
本文为Web自动化测试入门指南,介绍了HTML页面元素和DOM对象的基础知识,以及如何使用Python中的Selenium WebDriver进行元素定位、操作和等待机制,旨在帮助初学者理解Web自动化测试中的关键概念和操作技巧。
34 1
|
24天前
|
JSON Java 数据格式
Java系列之:生成JSON字符串
这篇文章介绍了两种在Java中生成JSON字符串的方法:使用`JSONObject`类及其`toJSONString`方法来动态生成,以及手动拼接字符串的方式来创建JSON格式的字符串。
Java系列之:生成JSON字符串
|
13天前
|
测试技术 C# 开发者
“代码守护者:详解WPF开发中的单元测试策略与实践——从选择测试框架到编写模拟对象,全方位保障你的应用程序质量”
【8月更文挑战第31天】单元测试是确保软件质量的关键实践,尤其在复杂的WPF应用中更为重要。通过为每个小模块编写独立测试用例,可以验证代码的功能正确性并在早期发现错误。本文将介绍如何在WPF项目中引入单元测试,并通过具体示例演示其实施过程。首先选择合适的测试框架如NUnit或xUnit.net,并利用Moq模拟框架隔离外部依赖。接着,通过一个简单的WPF应用程序示例,展示如何模拟`IUserRepository`接口并验证`MainViewModel`加载用户数据的正确性。这有助于确保代码质量和未来的重构与扩展。
24 0
|
16天前
|
JSON Go 数据格式
Go实现json字符串与各类struct相互转换
文章通过Go语言示例代码详细演示了如何实现JSON字符串与各类struct之间的相互转换,包括结构体对象生成JSON字符串和JSON字符串映射到struct对象的过程。
13 0
|
24天前
|
JSON Java 测试技术
单元测试问题之使用JSON文件作为参数化测试的输入源如何解决
单元测试问题之使用JSON文件作为参数化测试的输入源如何解决
41 0

热门文章

最新文章