javax.json (JSON-P - JSON Processing) là API chuẩn Java EE/Jakarta EE để xử lý JSON. Dùng JsonObjectBuilder build object từ scratch hoặc cập nhật object hiện có.
Cú pháp chính
JsonObjectBuilder createObjectBuilder()
JsonObjectBuilder add(String name, JsonValue value)
JsonObject build()
Ví dụ: Cập nhật JSON hiện có
import javax.json.*;
import java.io.*;
public class UpdateJsonTest {
public static void main(String[] args) throws Exception {
String jsonString = "{\"id\":\"115\",\"name\":\"Raja\",\"address\":[{\"area\":\"Madhapur\",\"city\":\"Hyderabad\"}]}";
// Parse JSON string → JsonObject
JsonReader reader = Json.createReader(new StringReader(jsonString));
JsonObject jsonObject = reader.readObject();
System.out.println("Existing JSON:\n" + jsonString);
// Build object mới từ object cũ + thêm field
JsonBuilderFactory factory = Json.createBuilderFactory(null);
JsonObjectBuilder builder = factory.createObjectBuilder();
// Copy tất cả field cũ
for (String key : jsonObject.keySet()) {
builder.add(key, jsonObject.get(key));
}
// Thêm field mới
builder.add("Contact Number", "9959984000");
builder.add("Country", "India");
JsonObject updated = builder.build();
// Write ra string
StringWriter writer = new StringWriter();
Json.createWriter(writer).writeObject(updated);
System.out.println("Updated JSON:\n" + writer.toString());
}
}
Output
Existing JSON:
{"id":"115","name":"Raja","address":[{"area":"Madhapur","city":"Hyderabad"}]}
Updated JSON:
{"id":"115","name":"Raja","address":[{"area":"Madhapur","city":"Hyderabad"}],"Contact Number":"9959984000","Country":"India"}
Các operation hữu ích khác
- Remove field: Không có remove trực tiếp → rebuild bỏ field đó.
- Update nested: Duyệt JsonObject/JsonArray, tạo builder mới cho nested.
- JsonPointer (RFC 6901):
Json.createPointer("/address/0/city").replace(jsonObject, Json.createValue("NewCity"))(JSON-P 1.1+). - JsonPatch (RFC 6902): Apply patch operations (add, remove, replace, move, copy, test).
Dependency
jakarta.platform
jakarta.json-api
2.0.1
org.glassfish
jakarta.json
2.0.1
javax.json
javax.json-api
1.1.4
Lưu ý
- JSON-P (javax.json/jakarta.json) là **low-level API** (streaming/tree model), không có data binding tự động như Jackson/Gson.
- Phù hợp: lightweight, không dependency heavy, standard compliance, streaming large JSON.
- Dự án Spring Boot: thường dùng Jackson (auto-configured) thay vì JSON-P trực tiếp.