JsonParserSequence เป็น helper class ใช้สร้าง parser ที่ประกอบด้วยสอง sub-parsers วางใน ลำดับเฉพาะ (particular sequence) เราสามารถสร้าง sequence โดยใช้เมธอด static createFlattened() ของคลาส JsonParserSequence
Syntax
public static JsonParserSequence createFlattened(JsonParser first, JsonParser second)
ตัวอย่างการใช้งาน
import java.io.*;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.util.*;
public class JsonParserSequenceTest {
public static void main(String[] args) throws JsonParseException, IOException {
String jsonString1 = "{\"id\":\"101\", \"name\":\"Ravi Chandra\", \"address\":\"Pune\"}";
String jsonString2 = "{\"id\":\"102\", \"name\":\"Raja Ramesh\", \"address\":\"Hyderabad\", \"contacts\":[{\"mobile\":\"9959984805\", \"home\":\"7702144400\"}]}";
JsonFactory jsonFactory = new JsonFactory();
JsonParser jsonParser1 = jsonFactory.createParser(jsonString1);
JsonParser jsonParser2 = jsonFactory.createParser(jsonString2);
JsonParserSequence jsonParserSequence = JsonParserSequence.createFlattened(jsonParser1, jsonParser2);
JsonToken jsonToken = jsonParserSequence.nextToken();
while (jsonToken != null) {
switch (jsonToken) {
case FIELD_NAME:
System.out.println("Key field: " + jsonParserSequence.getText());
break;
case VALUE_FALSE:
case VALUE_NULL:
case VALUE_NUMBER_FLOAT:
case VALUE_NUMBER_INT:
case VALUE_STRING:
case VALUE_TRUE:
System.out.println("Key value: " + jsonParserSequence.getText());
break;
}
jsonToken = jsonParserSequence.nextToken();
}
jsonParserSequence.close();
}
}
ผลลัพธ์ (Output)
Key field: id
Key value: 101
Key field: name
Key value: Ravi Chandra
Key field: address
Key value: Pune
Key field: id
Key value: 102
Key field: name
Key value: Raja Ramesh
Key field: address
Key value: Hyderabad
Key field: contacts
Key field: mobile
Key value: 9959984805
Key field: home
Key value: 7702144400
คำอธิบาย
JsonParserSequence.createFlattened() รวมสอง parser เข้าด้วยกัน โดยอ่าน parser แรกจนจบ แล้วค่อยอ่าน parser ที่สอง ตรงกับชื่อ "flattened" - ทำให้สอง JSON objects กลายเป็น stream ของ tokens ต่อเนื่องเดียว
กรณีการใช้งาน (Use Cases)
- Log aggregation - รวม JSON log entries หลายไฟล์
- Stream processing - ประมวลผล JSON streams หลายแหล่งต่อเนื่อง
- Batch processing - อ่าน multiple JSON files วนลูปเดียว
- Testing - สร้าง test data จากหลาย JSON sources
ข้อควรระวัง
- ไม่ merge JSON objects (ไม่รวม key ซ้ำ) แค่ concatenate token streams
- ทั้งสอง parser ต้องเป็น valid JSON structures
- Memory efficient - streaming, ไม่โหลดทั้งหมดในหน่วยความจำ
ตัวเลือกอื่นสำหรับ Merge JSON
- ObjectMapper.readTree() + deep merge - merge object contents จริงๆ
- JSON Patch (RFC 6902) - apply patches
- JSON Merge Patch (RFC 7386) - merge patch semantics
สรุป
JsonParserSequence.createFlattened() ให้วิธี streaming-efficient ในการรวม multiple JSON parsers ให้กลายเป็น single token stream เหมาะสำหรับการประมวลผล batch/stream ของ JSON data หลายแหล่ง