Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cập nhật JSON dữ liệu dùng javax.json API (Java)

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.