大家好,欢迎来到IT知识分享网。
FastJson详解 与 使用
7.1 JSON.toJSONString(Object object)
7.2 JSON.parseObject(String text, Class clazz)
7.3 JSON.parseArray(String text, Class clazz)
7.4 JSON.toJavaObject(JSONObject jsonObject, Class clazz)
|
🎈边走、边悟🎈迟早会好 |
Fastjson 是阿里巴巴开源的一个高性能 Java JSON 处理库,广泛应用于 Java 开发中。它提供了序列化(将 Java 对象转换为 JSON 字符串)和反序列化(将 JSON 字符串转换为 Java 对象)的功能。与其他 JSON 处理库相比,Fastjson 以其速度快、使用简单、功能强大而著称。
1. Fastjson 的主要功能
- 序列化和反序列化:将 Java 对象转换为 JSON 字符串,或者将 JSON 字符串转换为 Java 对象。
- 支持泛型:能够处理泛型数据类型的序列化和反序列化。
- JSONPath 支持:类似于 XPath 的语法,可以方便地查询 JSON 数据。
- 注解支持:支持通过注解自定义序列化和反序列化行为。
2. 快速开始
要使用 Fastjson,首先需要在项目中添加 Maven 依赖:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency>
2.1 对象与 JSON 字符串的转换
序列化:将 Java 对象转换为 JSON 字符串
import com.alibaba.fastjson.JSON; public class FastjsonExample { public static void main(String[] args) { User user = new User(); user.setId(1); user.setName("John Doe"); // 序列化 String jsonString = JSON.toJSONString(user); System.out.println(jsonString); // 输出:{"id":1,"name":"John Doe"} } } class User { private int id; private String name; // getter 和 setter 方法 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
反序列化:将 JSON 字符串转换为 Java 对象
import com.alibaba.fastjson.JSON; public class FastjsonExample { public static void main(String[] args) { String jsonString = "{\"id\":1,\"name\":\"John Doe\"}"; // 反序列化 User user = JSON.parseObject(jsonString, User.class); System.out.println(user.getName()); // 输出:John Doe } }
2.2 List 与 JSON 字符串的转换
序列化:将 List 转换为 JSON 字符串
import com.alibaba.fastjson.JSON; import java.util.ArrayList; import java.util.List; public class FastjsonExample { public static void main(String[] args) { List<User> users = new ArrayList<>(); users.add(new User(1, "John Doe")); users.add(new User(2, "Jane Doe")); // 序列化 String jsonString = JSON.toJSONString(users); System.out.println(jsonString); // 输出:[{"id":1,"name":"John Doe"},{"id":2,"name":"Jane Doe"}] } }
反序列化:将 JSON 字符串转换为 List
import com.alibaba.fastjson.JSON; import java.util.List; public class FastjsonExample { public static void main(String[] args) { String jsonString = "[{\"id\":1,\"name\":\"John Doe\"},{\"id\":2,\"name\":\"Jane Doe\"}]"; // 反序列化 List<User> users = JSON.parseArray(jsonString, User.class); for (User user : users) { System.out.println(user.getName()); } } }
3. 注解支持
Fastjson 提供了 @JSONField 注解,可以用来控制字段的序列化和反序列化行为。
import com.alibaba.fastjson.annotation.JSONField; public class User { private int id; @JSONField(name = "fullName") private String name; @JSONField(serialize = false) private String password; // getter 和 setter }
在这个例子中:
@JSONField(name = "fullName")会将name字段序列化为fullName。@JSONField(serialize = false)会使password字段不被序列化。
4. JSONPath 查询
Fastjson 支持 JSONPath,这是一种用于查询 JSON 数据的表达式语言。
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONPath; import java.util.Map; public class FastjsonExample { public static void main(String[] args) { String jsonString = "{\"id\":1,\"name\":\"John Doe\",\"address\":{\"city\":\"New York\"}}"; Map<String, Object> data = JSON.parseObject(jsonString); // 使用 JSONPath 查询 Object city = JSONPath.eval(data, "$.address.city"); System.out.println(city); // 输出:New York } }
5. 性能与安全
Fastjson 以其高性能著称,但在使用时需要注意安全性问题,特别是在反序列化过程中可能会存在反序列化漏洞。因此,在使用 Fastjson 进行反序列化时,应确保 JSON 数据来源的可信性,并尽可能使用 JSON.parseObject(String text, Class<T> clazz) 等安全的方法。
6. 版本与兼容性
确保使用最新版本的 Fastjson,因为更新版本通常会修复已知的安全问题和性能问题。
7.常用方法
7.1 JSON.toJSONString(Object object)
将 Java 对象序列化为 JSON 字符串。
import com.alibaba.fastjson.JSON; public class FastjsonExample { public static void main(String[] args) { User user = new User(1, "John Doe"); String jsonString = JSON.toJSONString(user); System.out.println(jsonString); // 输出:{"id":1,"name":"John Doe"} } }
7.2 JSON.parseObject(String text, Class<T> clazz)
将 JSON 字符串反序列化为 Java 对象。
import com.alibaba.fastjson.JSON; public class FastjsonExample { public static void main(String[] args) { String jsonString = "{\"id\":1,\"name\":\"John Doe\"}"; User user = JSON.parseObject(jsonString, User.class); System.out.println(user.getName()); // 输出:John Doe } }
7.3 JSON.parseArray(String text, Class<T> clazz)
将 JSON 数组字符串反序列化为 List 对象。
import com.alibaba.fastjson.JSON; import java.util.List; public class FastjsonExample { public static void main(String[] args) { String jsonString = "[{\"id\":1,\"name\":\"John Doe\"},{\"id\":2,\"name\":\"Jane Doe\"}]"; List<User> users = JSON.parseArray(jsonString, User.class); users.forEach(user -> System.out.println(user.getName())); // 输出:John Doe, Jane Doe } }
7.4 JSON.toJavaObject(JSONObject jsonObject, Class<T> clazz)
将 JSONObject 转换为指定类型的 Java 对象。
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; public class FastjsonExample { public static void main(String[] args) { JSONObject jsonObject = new JSONObject(); jsonObject.put("id", 1); jsonObject.put("name", "John Doe"); User user = JSON.toJavaObject(jsonObject, User.class); System.out.println(user.getName()); // 输出:John Doe } }
7.5 JSONObject 类
表示一个 JSON 对象。
put(String key, Object value):向JSONObject中添加键值对。getString(String key):获取指定键的字符串值。getIntValue(String key):获取指定键的整数值。
import com.alibaba.fastjson.JSONObject; public class FastjsonExample { public static void main(String[] args) { JSONObject jsonObject = new JSONObject(); jsonObject.put("id", 1); jsonObject.put("name", "John Doe"); String name = jsonObject.getString("name"); int id = jsonObject.getIntValue("id"); System.out.println("Name: " + name); // 输出:Name: John Doe System.out.println("ID: " + id); // 输出:ID: 1 } }
7.6 JSONArray 类
表示一个 JSON 数组。
add(Object value):向JSONArray中添加元素。getJSONObject(int index):获取指定索引处的JSONObject。getString(int index):获取指定索引处的字符串值。import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; public class FastjsonExample { public static void main(String[] args) { JSONArray jsonArray = new JSONArray(); JSONObject user1 = new JSONObject(); user1.put("id", 1); user1.put("name", "John Doe"); JSONObject user2 = new JSONObject(); user2.put("id", 2); user2.put("name", "Jane Doe"); jsonArray.add(user1); jsonArray.add(user2); JSONObject firstUser = jsonArray.getJSONObject(0); System.out.println(firstUser.getString("name")); // 输出:John Doe } }7.7 反序列化为泛型类型
在反序列化时,如果要处理泛型类型,可以使用 TypeReference 来指定类型.
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import java.util.List; import java.util.Map; public class FastjsonExample { public static void main(String[] args) { String jsonString = "[{\"id\":1,\"name\":\"John Doe\"},{\"id\":2,\"name\":\"Jane Doe\"}]"; // 使用 TypeReference 反序列化为泛型类型 List<Map<String, Object>> userList = JSON.parseObject(jsonString, new TypeReference<List<Map<String, Object>>>() {}); for (Map<String, Object> user : userList) { System.out.println(user.get("name")); } } }
8.配置选项
Fastjson 提供了许多配置选项,可以通过 SerializerFeature 和 ParserConfig 来调整序列化和反序列化行为。
8.1 SerializerFeature
用于控制序列化的行为。
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; public class FastjsonExample { public static void main(String[] args) { User user = new User(1, "John Doe"); String jsonString = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty); System.out.println(jsonString); // 空字符串字段会被序列化为空字符串,而不是 null } }
8.2 ParserConfig
用于配置反序列化的行为,如注册自定义反序列化器。
import com.alibaba.fastjson.parser.ParserConfig; public class FastjsonExample { public static void main(String[] args) { ParserConfig.getGlobalInstance().addAccept("com.example"); // 配置安全白名单 } }
9.总结
- 提供服务器端、安卓客户端两种解析工具,性能表现较好。
- 提供了 toJSONString() 和 parseObject() 方法来将 Java 对象与 JSON 相互转换。调用toJSONString方 法即可将对象转换成 JSON 字符串,parseObject 方法则反过来将 JSON 字符串转换成对象。
- 允许转换预先存在的无法修改的对象(只有class、无源代码)。
- Java泛型的广泛支持。
- 允许对象的自定义表示、允许自定义序列化类。
- 支持任意复杂对象(具有深厚的继承层次和广泛使用的泛型类型)。
🌟感谢支持 听忆.-CSDN博客
| 🎈众口难调🎈从心就好 |
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/109973.html