Fastjson 2.x (gói `com.alibaba.fastjson2`) cung cấp các API nâng cao cho các tình huống phức tạp:
1. Phân tích luồng cho tệp JSON lớn
Sử dụng JSONReader để xử lý dữ liệu cỡ lớn mà không gây tràn bộ nhớ:
import com.alibaba.fastjson2.JSONReader;
import java.io.FileReader;
public class StreamingExample {
public static void main(String[] args) throws Exception {
try (FileReader input = new FileReader("data.json");
JSONReader parser = JSONReader.of(input)) {
parser.startArray();
while (parser.hasNext()) {
DataRecord record = parser.read(DataRecord.class);
System.out.println("Item: " + record.identifier);
}
parser.endArray();
}
}
static class DataRecord {
String identifier;
}
}
2. Truy vấn dữ liệu với JSONPath
Trích xuất dữ liệu con từ cấu trúc JSON:
String jsonData = "{\"organization\":{\"title\":\"TechCorp\",\"members\":[{\"id\":101,\"label\":\"Dev\"}]}}";
JSONObject root = JSON.parseObject(jsonData);
// Lấy tên tổ chức
String orgName = JSONPath.eval(root, "$.organization.title");
// Lọc thành viên theo ID
List> result = JSONPath.eval(root, "$.organization.members[?(@.id == 101)]");
3. Lọc trường động
Kiểm soát trường xuất hiện trong kết quả tuỳ theo điều kiện:
// Sử dụng PropertyFilter
String output = JSON.toJSONString(data, new PropertyFilter() {
public boolean apply(Object source, String field, Object value) {
return !"accessToken".equals(field) || isAdminUser();
}
});
4. Tuỳ chỉnh chuyển đổi kiểu dữ liệu
Xử lý định dạng dữ liệu không chuẩn:
public class CustomBoolParser implements ObjectReader<Boolean> {
public Boolean readObject(JSONReader parser, Type type, Object name, long flags) {
return List.of("true", "1", "yes").contains(parser.readString());
}
}
// Áp dụng cho trường
@JSONField(deserializeUsing = CustomBoolParser.class)
public Boolean isActive;
5. Tích hợp Spring MVC
Cấu hình Fastjson làm bộ chuyển đổi HTTP:
@Configuration
public class WebConfig implements WebMvcConfigurer {
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setWriterFeatures(JSONWriter.Feature.PrettyFormat);
converter.setFastJsonConfig(config);
converters.add(0, converter);
}
}
6. Tối ưu hiệu năng
- Sử dụng
JSON.toJSONBytes()thay vì chuyển đổi chuỗi - Tắt các tính năng không cần thiết như
WriteClassName - Tái sử dụng đối tượng
JSONWriter/JSONReader
7. Chú thích nâng cao
| Chú thích | Công dụng |
|---|---|
@JSONType(alphabetic=false) | Giữ nguyên thứ tự trường |
@JSONField(unwrapped=true) | Mở rộng đối tượng lồng ghép |
8. Bảo mật
- Fastjson 2.x mặc định tắt AutoType
- Kích hoạt chế độ an toàn nếu cần:
System.setProperty("fastjson2.parser.safeMode", "true") - Luôn cập nhật phiên bản mới nhất
9. Khác biệt giữa Fastjson 1.x và 2.x
| Tính năng | 1.x | 2.x |
|---|---|---|
| Gói | com.alibaba.fastjson | com.alibaba.fastjson2 |
| Hiệu năng | Nhanh | Nhanh hơn |
| Bảo mật | AutoType mặc định bật | AutoType mặc định tắt |