คลาส 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