Fastjson2
提供了强大的类型转换功能,可以方便地将 JSON 字符串解析为 Java 对象、集合类型,或者其他自定义类型。这些功能使得 Fastjson2
在 JSON 数据的处理上更为灵活和高效。下面详细介绍 Fastjson2
的类型转换方法和相关用法。
1. 基本的类型转换
1.1 将 JSON 字符串转换为 Java 对象
通过 JSON.parseObject()
方法,你可以轻松地将 JSON 字符串转换为 Java 对象。该方法支持将 JSON 数据映射为 Java 对象、List
、Map
等类型。
示例:转换 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 字符串转换为集合类型,如 List
或 Set
。
示例:将 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
也支持将集合类型(如 List
或 Set
)转换为 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
)。 - 集合类型(如
List
、Map
)。 - 嵌套的 JSON 对象和数组。
- 使用
TypeReference
处理复杂类型(如带泛型的List<T>
、Map<K, V>
)。 - 自定义类型转换(如通过
@JSONField
注解自定义日期格式)。
这些功能使得 Fastjson2
成为一个强大且灵活的 JSON 处理工具,适用于各种场景中的 JSON 数据解析和转换。