一、FastJSON的介绍
FastJSON 是阿里巴巴开源的一个高性能的 Java JSON 处理库,用于在 Java 应用程序中解析和生成 JSON 数据。
二、FastJSON的特点
1、高性能:FastJSON 以其卓越的性能而闻名,它被设计成一种极快的 JSON 库,可以在读取和写入 JSON 数据时实现卓越的性能。
2、丰富的功能:FastJSON 提供了丰富的功能,包括将 Java 对象序列化为 JSON 格式和将 JSON 数据解析为 Java 对象。它支持复杂数据类型,包括嵌套对象、集合、数组等。
3、简单易用的 API:FastJSON 提供了简单易用的 API,使开发人员能够轻松地进行 JSON 数据的处理。
4、自定义序列化和反序列化:FastJSON 允许你自定义如何将 Java 对象序列化为 JSON 数据以及如何将 JSON 数据反序列化为 Java 对象。
5、支持标准规范:FastJSON 支持 JSON 规范(RFC 7159),并能够处理 JSON 格式的各种细节,包括转义字符和特殊字符。
6、支持日期格式:FastJSON 具有内置的日期序列化和反序列化功能,可以处理日期数据的格式化和解析。
7、兼容性:FastJSON 兼容 Java 标准库中的 JSON API,如 javax.json
,使得迁移或替换其他 JSON 库变得相对容易。
三、FastJSON库使用方法
添加依赖
在 Maven 项目中,可以通过添加以下依赖来使用 FastJSON:
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.75</version> <!-- 使用最新版本 -->
</dependency>
序列化和反序列化
- 将 Java 对象序列化为 JSON 字符串:
User user = new User();
user.setId(1);
user.setName("张三");
user.setAge(18);
String jsonStr = JSON.toJSONString(user);
System.out.println(jsonStr);
- 将 JSON 字符串反序列化为 Java 对象:
String jsonStr = "{\"id\":1,\"name\":\"张三\",\"age\":18}";
User user = JSON.parseObject(jsonStr, User.class);
System.out.println(user);
- 解析 JSON 字符串:
String jsonStr = "{\"id\":1,\"name\":\"张三\",\"age\":18}";
JSONObject jsonObject = JSON.parseObject(jsonStr);
int id = jsonObject.getIntValue("id");
String name = jsonObject.getString("name");
int age = jsonObject.getIntValue("age");
System.out.println(id + ", " + name + ", " + age);
四、FastJSON库详细使用
1. 使用过滤器进行序列化
FastJSON 提供了强大的过滤器功能,允许在序列化过程中包含或排除特定的字段。
JSONObject user = new JSONObject();
user.put("name", "xiaoming");
user.put("age", "18");
SimplePropertyPreFilter filter = new SimplePropertyPreFilter(JSONObject.class, "name");
filter.getIncludes().add("name"); // 展示白名单(展示字段)
filter.getExcludes().add("age"); // 展示黑名单(排除字段)
System.out.println(JSON.toJSONString(user, filter));
// 输出:{"name":"xiaoming"}
2. 使用注解控制序列化和反序列化
FastJSON 提供了 @JSONField
注解,可以用于控制字段的序列化和反序列化行为。
public class User {@JSONField(name = "userId")private int id;@JSONField(serialize = false)private String name;@JSONField(format = "yyyy-MM-dd HH:mm:ss")private Date birthday;// getter和setter方法
}
在这个例子中:
@JSONField(name = "userId")
会将id
字段序列化为userId
。@JSONField(serialize = false)
会使name
字段不被序列化。@JSONField(format = "yyyy-MM-dd HH:mm:ss")
指定birthday
字段的日期格式。 [来源:CSDN博客]
3. 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);Object city = JSONPath.eval(data, "$.address.city");System.out.println(city);}
}
4. 反序列化为泛型类型
在反序列化时,如果要处理泛型类型,可以使用 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\"}]";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"));}}
}
5. 配置选项
FastJSON 提供了许多配置选项,可以通过 SerializerFeature
和 ParserConfig
来调整序列化和反序列化行为。
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);}
}