Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีดู Settings ของ JsonGenerator ด้วย Jackson ใน Java

คลาส JsonGenerator รับผิดชอบ เขียน JSON data เป็น stream แทนการสร้าง Object Model ในหน่วยความจำ รายการ settings ที่สามารถ เปิด/ปิด อยู่ใน enum JsonGenerator.Feature ซึ่งมี static method values() คืนค่า array ของ constants ของ enum type นี้

Syntax

public static enum JsonGenerator.Feature extends Enum<JsonGenerator.Feature>

ตัวอย่างการใช้งาน

import java.io.*;
import com.fasterxml.jackson.core.*;

public class JsonGeneratorSettingsTest {
    public static void main(String[] args) throws IOException {
        StringWriter writer = new StringWriter();
        JsonFactory jsonFactory = new JsonFactory();
        JsonGenerator jsonGenerator = jsonFactory.createGenerator(writer);
        
        for (JsonGenerator.Feature feature : JsonGenerator.Feature.values()) {
            boolean result = jsonGenerator.isEnabled(feature);
            System.out.println(feature.name() + ":" + result);
        }
        jsonGenerator.close();
    }
}

ผลลัพธ์ (Output) - Default Settings

AUTO_CLOSE_TARGET:true
AUTO_CLOSE_JSON_CONTENT:true
FLUSH_PASSED_TO_STREAM:true
QUOTE_FIELD_NAMES:true
QUOTE_NON_NUMERIC_NUMBERS:true
ESCAPE_NON_ASCII:false
WRITE_NUMBERS_AS_STRINGS:false
WRITE_BIGDECIMAL_AS_PLAIN:false
STRICT_DUPLICATE_DETECTION:false
IGNORE_UNKNOWN:false

คำอธิบาย Features สำคัญ

Feature Default คำอธิบาย
AUTO_CLOSE_TARGET true ปิด output target อัตโนมัติเมื่อ generator ปิด
AUTO_CLOSE_JSON_CONTENT true ปิด JSON content อัตโนมัติ (write closing brackets)
FLUSH_PASSED_TO_STREAM true ส่ง flush ไปยัง underlying stream
QUOTE_FIELD_NAMES true ใส่ quotes รอบ field names (standard JSON)
QUOTE_NON_NUMERIC_NUMBERS true ใส่ quotes รอบ non-numeric numbers (NaN, Infinity)
ESCAPE_NON_ASCII false escape non-ASCII characters เป็น \uXXXX
WRITE_NUMBERS_AS_STRINGS false เขียน numbers เป็น JSON strings
WRITE_BIGDECIMAL_AS_PLAIN false เขียน BigDecimal แบบ plain (ไม่ใช่ scientific notation)
STRICT_DUPLICATE_DETECTION false ตรวจจับ duplicate field names และโยน error
IGNORE_UNKNOWN false ignore unknown properties (สำหรับ writing)

การเปลี่ยนแปลง Settings

JsonFactory factory = new JsonFactory();
JsonGenerator generator = factory.createGenerator(writer)
    .enable(JsonGenerator.Feature.ESCAPE_NON_ASCII)
    .enable(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN)
    .disable(JsonGenerator.Feature.QUOTE_FIELD_NAMES); // ไม่แนะนำ - invalid JSON

กรณีการใช้งาน Features สำคัญ

  • ESCAPE_NON_ASCII: true - เมื่อต้องการ ASCII-only output (legacy systems)
  • WRITE_BIGDECIMAL_AS_PLAIN: true - หลีกเลี่ยง scientific notation สำหรับค่าทศนิยมใหญ่
  • QUOTE_FIELD_NAMES: false - สำหรับ JavaScript object literals (ไม่ใช่ valid JSON)
  • STRICT_DUPLICATE_DETECTION: true - ป้องกัน duplicate keys ใน output

สรุป

JsonGenerator.Feature ให้การควบคุม JSON output format และ behavior อย่างละเอียดผ่าน streaming API สำคัญสำหรับ performance tuning, legacy compatibility, และ standards compliance