java fastjson2将 map、实体类、list等 类型转换为JSON介绍

Fastjson2 提供了强大的类型转换功能,可以方便地将 JSON 字符串解析为 Java 对象、集合类型,或者其他自定义类型。这些功能使得 Fastjson2 在 JSON 数据的处理上更为灵活和高效。下面详细介绍 Fastjson2 的类型转换方法和相关用法。

1. 基本的类型转换

1.1 将 JSON 字符串转换为 Java 对象

通过 JSON.parseObject() 方法,你可以轻松地将 JSON 字符串转换为 Java 对象。该方法支持将 JSON 数据映射为 Java 对象、ListMap 等类型。

示例:转换 JSON 字符串为 Java 对象
java 复制代码
import com.alibaba.fastjson2.JSON;

public class Fastjson2Example {
    public static void main(String[] args) {
        String jsonString = "{\"name\":\"John\", \"age\":25}";

        // 将 JSON 字符串转换为 Java 对象
        Person person = JSON.parseObject(jsonString, Person.class);

        System.out.println(person.getName()); // 输出: John
        System.out.println(person.getAge());  // 输出: 25
    }
}

class Person {
    private String name;
    private int age;

    // Getters and Setters
    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; }
}
1.2 将 JSON 字符串转换为 Map

如果你不需要一个特定的 Java 类,直接将 JSON 字符串解析为 Map 类型也是非常方便的。

示例:将 JSON 字符串转换为 Map
java 复制代码
import com.alibaba.fastjson2.JSON;
import java.util.Map;

public class Fastjson2Example {
    public static void main(String[] args) {
        String jsonString = "{\"name\":\"John\", \"age\":25}";

        // 将 JSON 字符串转换为 Map
        Map<String, Object> map = JSON.parseObject(jsonString, Map.class);

        // 输出 Map 内容
        System.out.println(map);  // 输出: {name=John, age=25}
    }
}
1.3 将 JSON 字符串转换为集合类型(List、Set)

Fastjson2 也可以将 JSON 字符串转换为集合类型,如 ListSet

示例:将 JSON 字符串转换为 List
java 复制代码
import com.alibaba.fastjson2.JSON;
import java.util.List;

public class Fastjson2Example {
    public static void main(String[] args) {
        String jsonArrayString = "[{\"name\":\"John\",\"age\":25}, {\"name\":\"Jane\",\"age\":28}]";

        // 将 JSON 数组字符串转换为 List
        List<Person> personList = JSON.parseArray(jsonArrayString, Person.class);

        // 输出 List 内容
        for (Person person : personList) {
            System.out.println(person.getName() + " - " + person.getAge());
        }
    }
}

2. 转换为不同类型的 JSON 数据

2.1 将 Java 对象转换为 JSON 字符串

通过 JSON.toJSONString() 方法,可以将 Java 对象转换为 JSON 字符串。

示例:将 Java 对象转换为 JSON 字符串
java 复制代码
import com.alibaba.fastjson2.JSON;

public class Fastjson2Example {
    public static void main(String[] args) {
        Person person = new Person();
        person.setName("John");
        person.setAge(25);

        // 将 Java 对象转换为 JSON 字符串
        String jsonString = JSON.toJSONString(person);
        System.out.println(jsonString);  // 输出: {"name":"John","age":25}
    }
}
2.2 将 Map 转换为 JSON 字符串

如果你有一个 Map 类型的数据,可以直接将其转换为 JSON 字符串。

示例:将 Map 转换为 JSON 字符串
java 复制代码
import com.alibaba.fastjson2.JSON;
import java.util.Map;
import java.util.HashMap;

public class Fastjson2Example {
    public static void main(String[] args) {
        Map<String, Object> map = new HashMap<>();
        map.put("name", "John");
        map.put("age", 25);

        // 将 Map 转换为 JSON 字符串
        String jsonString = JSON.toJSONString(map);
        System.out.println(jsonString);  // 输出: {"name":"John","age":25}
    }
}
2.3 将集合类型(List、Set)转换为 JSON 字符串

Fastjson2 也支持将集合类型(如 ListSet)转换为 JSON 字符串。

示例:将 List 转换为 JSON 字符串
java 复制代码
import com.alibaba.fastjson2.JSON;
import java.util.ArrayList;
import java.util.List;

public class Fastjson2Example {
    public static void main(String[] args) {
        List<Person> personList = new ArrayList<>();
        personList.add(new Person("John", 25));
        personList.add(new Person("Jane", 28));

        // 将 List 转换为 JSON 字符串
        String jsonString = JSON.toJSONString(personList);
        System.out.println(jsonString);  // 输出: [{"name":"John","age":25},{"name":"Jane","age":28}]
    }
}

3. 高级类型转换

3.1 使用自定义的 TypeReference 进行复杂类型转换

Fastjson2 支持使用 TypeReference 进行复杂类型的反序列化,如解析带泛型的类型。你可以通过 TypeReference 来转换为包含泛型的 Java 类型,如 List<T>Map<K, V>

示例:使用 TypeReference 进行复杂类型转换
java 复制代码
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.TypeReference;

import java.util.List;

public class Fastjson2Example {
    public static void main(String[] args) {
        String jsonString = "[{\"name\":\"John\",\"age\":25}, {\"name\":\"Jane\",\"age\":28}]";

        // 使用 TypeReference 进行复杂类型转换
        List<Person> personList = JSON.parseObject(jsonString, new TypeReference<List<Person>>() {});

        for (Person person : personList) {
            System.out.println(person.getName() + " - " + person.getAge());
        }
    }
}
3.2 解析嵌套的 JSON 对象和数组

对于嵌套的 JSON 对象和数组,Fastjson2 允许你在转换时嵌套不同的 Java 类型。

示例:解析嵌套 JSON 对象和数组
java 复制代码
import com.alibaba.fastjson2.JSON;

public class Fastjson2Example {
    public static void main(String[] args) {
        String jsonString = "{\"name\":\"John\",\"address\":{\"city\":\"Anytown\",\"street\":\"123 Main St\"}, \"phones\":[\"123-456-7890\", \"987-654-3210\"]}";

        // 将嵌套的 JSON 字符串转换为 Java 对象
        PersonWithAddress person = JSON.parseObject(jsonString, PersonWithAddress.class);

        System.out.println(person.getName());  // 输出: John
        System.out.println(person.getAddress().getCity());  // 输出: Anytown
        System.out.println(person.getPhones());  // 输出: [123-456-7890, 987-654-3210]
    }
}

class PersonWithAddress {
    private String name;
    private Address address;
    private List<String> phones;

    // Getters and Setters
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public Address getAddress() { return address; }
    public void setAddress(Address address) { this.address = address; }

    public List<String> getPhones() { return phones; }
    public void setPhones(List<String> phones) { this.phones = phones; }
}

class Address {
    private String city;
    private String street;

    // Getters and Setters
    public String getCity() { return city; }
    public void setCity(String city) { this.city = city; }

    public String getStreet() { return street; }
    public void setStreet(String street) { this.street = street; }
}
3.3 转换自定义类型

Fastjson2 还允许你通过 @JSONField 注解来自定义字段的类型转换。

示例:自定义类型转换
java 复制代码
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.annotation.JSONField;

public class Fastjson2Example {
    public static void main(String[] args) {
        String jsonString = "{\"name\":\"John\", \"dateOfBirth\":\"1995-05-15\"}";

        // 将 JSON 字符串解析为 Person 对象,自动将日期字段转换为 Date 类型
        PersonWithDate person = JSON.parseObject(jsonString, PersonWithDate.class);

        System.out.println(person.getName());  // 输出: John
        System.out.println(person.getDateOfBirth());  // 输出: Mon May 15 00:00:00 GMT 1995
    }
}

class PersonWithDate {
    private String name;

    @JSONField(format = "yyyy-MM-dd")
    private Date dateOfBirth;

    // Getters and Setters
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public Date getDateOfBirth() { return dateOfBirth; }
    public void setDateOfBirth(Date dateOfBirth) { this.dateOfBirth = dateOfBirth; }
}

4. 总结

Fastjson2 提供了丰富的类型转换功能,可以轻松地将 JSON 字符串转换为各种 Java 类型,包括:

  • 基本的 Java 对象(如 Person)。
  • 集合类型(如 ListMap)。
  • 嵌套的 JSON 对象和数组。
  • 使用 TypeReference 处理复杂类型(如带泛型的 List<T>Map<K, V>)。
  • 自定义类型转换(如通过 @JSONField 注解自定义日期格式)。

这些功能使得 Fastjson2 成为一个强大且灵活的 JSON 处理工具,适用于各种场景中的 JSON 数据解析和转换。

相关推荐
兩尛1 小时前
项目概述、开发环境搭建(day01)
java·spring boot·web
我想学LINUX2 小时前
【2024年华为OD机试】(C卷,100分)- 攀登者1 (Java & JS & Python&C/C++)
java·c语言·javascript·c++·python·游戏·华为od
日暮温柔5 小时前
实现nacos配置修改后无需重启服务--使用@RefreshScope注解
java
武昌库里写JAVA6 小时前
React方向:react中5种Dom的操作方式
java·开发语言·spring boot·学习·课程设计
ThetaarSofVenice6 小时前
一个个顺序挨着来 - 责任链模式(Chain of Responsibility Pattern)
java·设计模式·责任链模式
数据小小爬虫7 小时前
利用Java爬虫获取义乌购店铺所有商品列表:技术探索与实践
java·开发语言·爬虫
Dong雨7 小时前
Java的Stream流和Option类
java·新特性
!!!5257 小时前
maven的生命周期
java·数据库·maven
Hello Dam7 小时前
基于 FastExcel 与消息队列高效生成及导入机构用户数据
java·数据库·spring boot·excel·easyexcel·fastexcel
ShyTan7 小时前
java项目启动时,执行某方法
java·开发语言