FastJson中JSON.parseArray、JSON.parseObject 与 TypeReference、JSON.toJ ...

打印 上一主题 下一主题

主题 991|帖子 991|积分 2975

1. JSON.parseArray 方法

这个方法用于将JSON数组字符串直接解析为指定类型的Java列表。
举例:
假设我们有一个 JSON 数组字符串,它表现一系列坐标点,每个坐标点都是一个包含经度和纬度的对象。JSON 字符串大概看起来像这样:
  1. [  
  2.   {"latitude": 34.05, "longitude": -118.25},  
  3.   {"latitude": 33.94, "longitude": -118.40}  
  4. ]
复制代码
我们想要将这个 JSON 数组字符串解析为一个 List 类型的列表,其中 CoordinateVO 是一个简单的 Java 类,用于表现坐标点。
起首,定义 CoordinateVO 类:
  1. public class CoordinateVO {  
  2.     private double latitude;  
  3.     private double longitude;  
  4.   
  5.     // 构造函数、getter和setter省略
  6. }
复制代码
然后,使用 JSON.parseArray 方法解析 JSON 数组字符串:
  1. import com.alibaba.fastjson.JSON;  
  2. import java.util.List;  
  3.   
  4. public class Main {  
  5.     public static void main(String[] args) {  
  6.         String jsonArrayStr = "[{"latitude": 34.05, "longitude": -118.25}, {"latitude": 33.94, "longitude": -118.40}]";  
  7.   
  8.         // 使用JSON.parseArray解析JSON数组字符串为List<CoordinateVO>  
  9.         List<CoordinateVO> coordinateVOList = JSON.parseArray(jsonArrayStr, CoordinateVO.class);  
  10.   
  11.         // 遍历列表并打印每个坐标点  
  12.         for (CoordinateVO coordinateVO : coordinateVOList) {  
  13.             System.out.println(coordinateVO);  
  14.         }  
  15.     }  
  16. }
复制代码
留意:在上面的代码中,我省略了 CoordinateVO 类的构造函数、getter 和 setter 方法的实现,但在现实使用中你应该包含它们。在这个例子中,JSON.parseArray 方法担当两个参数:第一个参数是 JSON 数组字符串,第二个参数是目标 Java 类的 Class 对象,用于指定列表中元素的类型。
2. JSON.parseObject 方法与 TypeReference

JSON.parseObject 方法通常用于将JSON对象字符串解析为Java对象。
1)JSON.parseObject的简单使用
比方:我们使用 JSON.parseObject 方法将一个 JSON 字符串解析为 User 类的实例
  1. import com.alibaba.fastjson.JSON;  
  2.   
  3. public class Main {  
  4.     public static void main(String[] args) {  
  5.         String jsonStr = "{"id":1,"name":"John Doe","age":30}";  
  6.   
  7.         // 使用JSON.parseObject解析JSON字符串为User对象  
  8.         User user = JSON.parseObject(jsonStr, User.class);  
  9.   
  10.         // 打印解析后的User对象  
  11.         System.out.println(user);  
  12.     }  
  13.   
  14.     // 确保User类已经定义好  
  15. }
复制代码
2)JSON.parseObject 与 TypeReference 的组实用法
JSON.parseObject 与 TypeReference 用于处置惩罚更复杂的泛型类型,特别是在JSON字符串代表一个对象(大概是嵌套结构)时,但必要解析为特定类型的集合。它是用来处置惩罚那些大概看起来更像对象但现实上内部包含数组或列表的情况,或者当JSON字符串的结构更复杂时。
举例:
假设我们有一个JSON字符串,它表现一个包含多个坐标集的对象,每个坐标集都是一个包含经纬度等信息的对象列表。JSON字符串大概看起来像这样:
  1. {  
  2.   "coordinateSets": [  
  3.     {"id": 1, "latitude": 34.05, "longitude": -118.25},  
  4.     {"id": 2, "latitude": 33.94, "longitude": -118.40}  
  5.   ]  
  6. }
复制代码
我们想要将这个JSON字符串解析为一个Java对象,该对象包含一个 List 类型的属性。CoordinateSetVO 是一个简单的Java类,用于表现坐标集。
起首,定义 CoordinateSetVO 类:
  1. public class CoordinateSetVO {  
  2.     private int id;  
  3.     private double latitude;  
  4.     private double longitude;  
  5.   
  6.     // 构造函数、getter和setter省略  
  7. }
复制代码
然后,我们使用 JSON.parseObject 和 TypeReference 来解析JSON字符串:
  1. import com.alibaba.fastjson.JSON;  
  2. import com.alibaba.fastjson.TypeReference;  
  3.   
  4. import java.util.List;  
  5.   
  6. public class Main {  
  7.     public static void main(String[] args) {  
  8.         String jsonStr = "{"coordinateSets": [{"id": 1, "latitude": 34.05, "longitude": -118.25}, {"id": 2, "latitude": 33.94, "longitude": -118.40}]}";  
  9.   
  10.         // 定义一个内部类来捕获泛型类型信息  
  11.         class CoordinateSetsWrapper {  
  12.             private List<CoordinateSetVO> coordinateSets;  
  13.   
  14.             // getter和setter省略  
  15.         }  
  16.   
  17.         // 使用TypeReference来解析包含泛型集合的对象  
  18.         CoordinateSetsWrapper wrapper = JSON.parseObject(jsonStr, new TypeReference<CoordinateSetsWrapper>() {});  
  19.         List<CoordinateSetVO> coordinateSetVOList = wrapper.getCoordinateSets();  
  20.   
  21.         // 现在你可以使用coordinateSetVOList了  
  22.         for (CoordinateSetVO set : coordinateSetVOList) {  
  23.             System.out.println("ID: " + set.getId() + ", Latitude: " + set.getLatitude() + ", Longitude: " + set.getLongitude());  
  24.         }  
  25.     }  
  26.   
  27.     // 确保CoordinateSetVO有getId()、getLatitude()和getLongitude()方法  
  28. }
复制代码
留意,在这个例子中,我们定义了一个内部类 CoordinateSetsWrapper,它包含一个 List 类型的属性。这是因为我们的JSON字符串是一个对象,该对象有一个名为 coordinateSets 的属性,该属性才是我们真正想要解析的列表。通过 TypeReference(),我们告诉fastjson我们想要将JSON字符串解析为 CoordinateSetsWrapper 类型的对象,而且保留 coordinateSets 属性的泛型类型信息。
然后,我们可以从 CoordinateSetsWrapper 对象中获取 coordinateSets 列表,并对其举行进一步处置惩罚。
3.JSON.toJSONString 方法

JSON.toJSONString方法非常灵活,它可以处置惩罚各种复杂的Java对象,包括集合、数组、嵌套对象等,并将它们转换为相应的JSON字符串表现。
举例:
  1. import com.alibaba.fastjson.JSON;  
  2.   
  3. public class Main {  
  4.     public static void main(String[] args) {  
  5.         // 创建一个Java对象  
  6.         User user = new User();  
  7.         user.setId(1);  
  8.         user.setName("John Doe");  
  9.         user.setAge(30);  
  10.   
  11.         // 使用JSON.toJSONString方法将Java对象转换为JSON字符串  
  12.         String jsonStr = JSON.toJSONString(user);  
  13.   
  14.         // 打印JSON字符串  
  15.         System.out.println(jsonStr);  
  16.     }  
  17.   
  18.     // 假设User类已经定义好,并且包含相应的getter和setter方法  
  19.     static class User {  
  20.         private Integer id;  
  21.         private String name;  
  22.         private int age;  
  23.   
  24.         // 构造函数、getter和setter省略  
  25.     }  
  26. }
复制代码
  1. import com.alibaba.fastjson.JSON;  
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4.   
  5. public class ListToJsonExample {  
  6.     public static void main(String[] args) {  
  7.         // 创建一个List并添加一些元素  
  8.         List<User> userList = new ArrayList<>();  
  9.         userList.add(new User(1, "Alice", 25));  
  10.         userList.add(new User(2, "Bob", 30));  
  11.         userList.add(new User(3, "Charlie", 35));  
  12.   
  13.         // 使用JSON.toJSONString方法将List转换为JSON字符串  
  14.         String jsonStr = JSON.toJSONString(userList);  
  15.   
  16.         // 打印JSON字符串  
  17.         System.out.println(jsonStr);  
  18.     }  
  19.   
  20.     // 假设User类已经定义好,并且包含相应的getter和setter方法  
  21.     static class User {  
  22.         private Integer id;  
  23.         private String name;  
  24.         private int age;  
  25.   
  26.         // 构造函数  
  27.         public User(Integer id, String name, int age) {  
  28.             this.id = id;  
  29.             this.name = name;  
  30.             this.age = age;  
  31.         }  
  32.   
  33.         // getter和setter方法省略  
  34.     }  
  35. }
复制代码
最后,我们打印出了这个JSON字符串,它应该类似于以下格式:
  1. [{"id":1,"name":"Alice","age":25},{"id":2,"name":"Bob","age":30},{"id":3,"name":"Charlie","age":35}]
复制代码
这个JSON字符串表现了一个JSON数组,其中包含了三个JSON对象,每个对象都对应List中的一个User对象。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南七星之家

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表