Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 JsonParserSequence로 두 개의 JSON 문자열 순차적으로 병합하는 방법

JsonParserSequence란?

Jackson 라이브러리의 JsonParserSequence는 두 개의 하위 파서(sub-parser)를 특정 순서로 배치하여 마치 하나의 파서인 것처럼 동작하게 해주는 헬퍼 클래스입니다. 첫 번째 파서가 모든 토큰을 소진하면 자동으로 두 번째 파서로 전환되기 때문에, 여러 개의 JSON 문자열을 하나의 연속된 스트림처럼 순차적으로 처리할 수 있습니다.

시퀀스는 JsonParserSequence 클래스의 정적(static) 메서드인 createFlattened()를 호출하여 간단히 생성할 수 있습니다.

문법(Syntax)

public static JsonParserSequence createFlattened(JsonParser first, JsonParser second)

예제(Example)

아래 예제에서는 두 개의 JSON 문자열을 각각 JsonParser 객체로 생성한 뒤, createFlattened() 메서드로 하나의 시퀀스로 병합합니다. 그리고 nextToken() 메서드를 반복 호출하며 모든 토큰을 순서대로 읽어 필드 이름과 값을 출력합니다.

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

실행 결과를 보면 첫 번째 JSON 문자열의 필드(id, name, address)가 먼저 출력되고, 첫 번째 파서가 끝나는 지점에서 자동으로 두 번째 JSON 문자열의 필드(id, name, address, contacts)가 이어서 출력되는 것을 확인할 수 있습니다. 이처럼 JsonParserSequence를 활용하면 여러 JSON 데이터를 별도의 병합 로직 없이도 하나의 파서로 손쉽게 순차 처리할 수 있습니다.