Các tính năng nâng cao của Fastjson

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íchCô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ăng1.x2.x
Góicom.alibaba.fastjsoncom.alibaba.fastjson2
Hiệu năngNhanhNhanh hơn
Bảo mậtAutoType mặc định bậtAutoType mặc định tắt

Thẻ: fastjson JSONPath Spring MVC Java Serialization JSON Processing

Đăng vào ngày 21 tháng 6 lúc 22:34