อินเทอร์เฟซ JsonBuilderFactory เป็น factory สำหรับสร้าง instance ของ JsonObjectBuilder และ JsonObjectBuilder เป็น builder สำหรับสร้าง JsonObject models จากศูนย์ อินเทอร์เฟซนี้ initialize empty JSON object model และให้เมธอดเพิ่ม name/value pairs ลงใน object model และคืนค่า resulting object เราสามารถสร้าง JsonObjectBuilder instance ที่ใช้สร้าง JsonObject ได้ด้วยเมธอด createObjectBuilder()
Syntax
JsonObjectBuilder createObjectBuilder()
ตัวอย่างการใช้งาน
import java.io.*;
import javax.json.*;
public class UpdateExistingJsonTest {
public static void main(String[] args) throws Exception {
String jsonString = "{\"id\":\"115\", \"name\":\"Raja\", \"address\":[{\"area\":\"Madhapur\", \"city\":\"Hyderabad\"}]}";
StringReader reader = new StringReader(jsonString);
JsonReader jsonReader = Json.createReader(reader);
System.out.println("Existing JSON: \n" + jsonString);
StringWriter writer = new StringWriter();
JsonWriter jsonWriter = Json.createWriter(writer);
JsonObject jsonObject = jsonReader.readObject();
JsonBuilderFactory jsonBuilderFactory = Json.createBuilderFactory(null);
JsonObjectBuilder jsonObjectBuilder = jsonBuilderFactory.createObjectBuilder();
// คัดลอกฟิลด์เดิมทั้งหมด
for (String key : jsonObject.keySet()) {
jsonObjectBuilder.add(key, jsonObject.get(key));
}
// เพิ่มฟิลด์ใหม่
jsonObjectBuilder.add("Contact Number", "9959984000");
jsonObjectBuilder.add("Country", "India");
jsonObject = jsonObjectBuilder.build();
jsonWriter.writeObject(jsonObject);
System.out.println("new JSON: \n" + jsonObject);
}
}
ผลลัพธ์ (Output)
Existing JSON:
{"id":"115", "name":"Raja", "address":[{"area":"Madhapur", "city":"Hyderabad"}]}
new JSON:
{"id":"115","name":"Raja","address":[{"area":"Madhapur","city":"Hyderabad"}],"Contact Number":"9959984000","Country":"India"}
คำอธิบายขั้นตอน
- Parse JSON string เดิมเป็น JsonObject ด้วย JsonReader
- สร้าง JsonObjectBuilder ใหม่จาก JsonBuilderFactory
- Loop คัดลอกทุก key/value จาก object เดิมไป builder ใหม่
- เพิ่มฟิลด์ใหม่ด้วย builder.add()
- Build กลับเป็น JsonObject และเขียน output
ข้อดีของ Object Model API (javax.json)
- Immutable - JsonObject ไม่สามารถแก้ไขได้ ต้องสร้างใหม่ผ่าน Builder
- Thread-safe
- Standard API (JSR 374) - ไม่ผูก vendor library
- Streaming และ Object Model ทั้งคู่
สรุป
javax.json API ให้วิธีมาตรฐานในการอ่าน แก้ไข และเขียน JSON ผ่าน Object Model (JsonObject/JsonArray) และ Builder pattern เหมาะสำหรับแอปพลิเคชันที่ต้องการ standard API และ immutability