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
JsonFactorytạo parser từ string/input stream. - Đóng sequence:
sequence.close()(cũng đóng các sub-parser). - Alternative: Dùng
JsonNodemerge (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);