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

Gộp 2 JSON string theo thứ tự dùng JsonParserSequence (Jackson)

JsonParserSequence gộp 2 JsonParser thành một sequence duyệt tuần tự (first parser xong mới đến second). Tạo qua createFlattened().

Cú pháp

public static JsonParserSequence createFlattened(JsonParser first, JsonParser second)

Ví dụ: Merge 2 JSON object tuần tự

import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.util.*;

public class JsonParserSequenceTest {
    public static void main(String[] args) throws Exception {
        String json1 = "{\"id\":\"101\",\"name\":\"Ravi Chandra\",\"address\":\"Pune\"}";
        String json2 = "{\"id\":\"102\",\"name\":\"Raja Ramesh\",\"address\":\"Hyderabad\",\"contacts\":[{\"mobile\":\"9959984805\",\"home\":\"7702144400\"}]}";
        
        JsonFactory factory = new JsonFactory();
        JsonParser parser1 = factory.createParser(json1);
        JsonParser parser2 = factory.createParser(json2);
        
        // Gộp 2 parser
        JsonParserSequence sequence = JsonParserSequence.createFlattened(parser1, parser2);
        
        // Duyệt sequence
        JsonToken token;
        while ((token = sequence.nextToken()) != null) {
            switch (token) {
                case FIELD_NAME:
                    System.out.println("Key: " + sequence.getText());
                    break;
                case VALUE_STRING:
                case VALUE_NUMBER_INT:
                case VALUE_NUMBER_FLOAT:
                case VALUE_TRUE:
                case VALUE_FALSE:
                case VALUE_NULL:
                    System.out.println("Value: " + sequence.getText());
                    break;
            }
        }
        sequence.close();
    }
}

Output

Key: id
Value: 101
Key: name
Value: Ravi Chandra
Key: address
Value: Pune
Key: id
Value: 102
Key: name
Value: Raja Ramesh
Key: address
Value: Hyderabad
Key: contacts
Key: mobile
Value: 9959984805
Key: home
Value: 7702144400

Use case

  • Stream processing multiple JSON files/objects liên tiếp.
  • Concatenate JSON arrays từ nhiều source.
  • Log aggregation: parse multiple JSON log lines trong một stream.

Lưu ý

  • Chỉ **flatten** (duyệt tuần tự), **không merge** object (key trùng sẽ xuất hiện 2 lần).
  • Cần JsonFactory tạo parser từ string/input stream.
  • Đóng sequence: sequence.close() (cũng đóng các sub-parser).
  • Alternative: Dùng JsonNode merge (objectNode.setAll(other)) nếu cần merge object thực sự.

Ví dụ merge object thực sự (Jackson Tree Model)

ObjectMapper mapper = new ObjectMapper();
ObjectNode node1 = (ObjectNode) mapper.readTree(json1);
ObjectNode node2 = (ObjectNode) mapper.readTree(json2);
node1.setAll(node2); // Merge: node2 override node1
String merged = mapper.writeValueAsString(node1);