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

server/2025/1/16 17:04:09/

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()); // 输出: JohnSystem.out.println(person.getAge());  // 输出: 25}
}class Person {private String name;private int age;// Getters and Setterspublic 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 字符串转换为 MapMap<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 数组字符串转换为 ListList<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());  // 输出: JohnSystem.out.println(person.getAddress().getCity());  // 输出: AnytownSystem.out.println(person.getPhones());  // 输出: [123-456-7890, 987-654-3210]}
}class PersonWithAddress {private String name;private Address address;private List<String> phones;// Getters and Setterspublic 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 Setterspublic 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());  // 输出: JohnSystem.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 Setterspublic 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 数据解析和转换。


http://www.ppmy.cn/server/158869.html

相关文章

Spring Boot中的配置文件有哪些类型

在 Spring Boot 中&#xff0c;配置文件用于管理应用程序的设置和参数&#xff0c;通常存放在项目的 src/main/resources 目录下。Spring Boot 支持多种类型的配置文件&#xff0c;并通过这些文件来控制应用的行为和环境配置。 1. application.properties application.proper…

HTTP 缓存机制详解

一、引言 在当今数字化时代&#xff0c;网络应用的性能直接关系到用户体验。想象一下&#xff0c;当你在浏览网页时&#xff0c;每一次点击都需要漫长的等待来加载新内容&#xff0c;那该是多么糟糕的体验。而 HTTP 缓存机制就像是一位神奇的加速助手&#xff0c;能够显著提升…

Python对接GitHub:详细操作指南

在现代软件开发中,GitHub已经成为不可或缺的代码托管和版本控制平台。作为开发者,能够通过编程方式与GitHub交互可以大大提高工作效率。本文将详细介绍如何使用Python对接GitHub,实现仓库管理、文件操作、Issue处理、Pull Request管理以及Tag操作等功能。 © ivwdcwso (ID:…

数据结构(Java版)第八期:LinkedList与链表(三)

专栏&#xff1a;数据结构(Java版) 个人主页&#xff1a;手握风云 目录 一、链表中的经典面试题 1.1. 链表分割 1.2. 链表的回文结构 1.3. 相交链表 1.4. 环形链表 一、链表中的经典面试题 1.1. 链表分割 题目中要求不能改变原来的数据顺序&#xff0c;也就是如上图所示。…

线程池底部工作原理

线程池内部是通过线程和队列实现的&#xff0c;当我们通过线程池处理任务时&#xff1a; 如果线程池中的线程数量小于corePoolSize&#xff0c;无论是否有处于空闲的线程&#xff0c;都创建新的线程来处理被添加的任务。 如果线程池中的线程数量等于corePoolSize&#xff0c;…

centos安装golang

1.下载golang golang所有版本网址 https://studygolang.com/dl //下载并解压到/usr/local文件下 wget https://studygolang.com/dl/golang/go1.18.3.linux-amd64.tar.gz //解压并复制到/user/local文件夹下 tar -C /usr/local -zxf go1.18.3.linux-amd64.tar.gz 2.编辑环境变…

SQL正则表达式用法大全以及如何利用正则表达式处理复杂数据

正则表达式用法大全 在SQL中&#xff0c;正则表达式通常用于模式匹配&#xff0c;以便搜索、替换或验证数据。不同的SQL数据库管理系统&#xff08;DBMS&#xff09;支持不同的正则表达式功能。以下是常见的SQL中正则表达式的用法和相关功能&#xff1a; 1. MySQL 正则表达式 …

unity——Preject3——UI管理器

目录 1.canvas Canvas 的主要功能 Canvas 的组件 Canvas 的渲染模式 Canvas 的使用步骤 Match 的作用 Match 的工作原理 如何选择合适的 Match 值 示例 总结 EventSystem 的作用 EventSystem 和 Canvas 的关系 EventSystem 的组件 EventSystem 的工作流程 2.代码…