Java에서 배열(Array)은 동일한 타입의 여러 변수를 저장하는 객체입니다. 배열은 기본 타입(primitive type)과 객체 참조를 모두 담을 수 있으며, ArrayList는 크기가 자동으로 조절되는 가변형 객체 리스트를 표현합니다. ArrayList를 사용하면 요소를 자유롭게 추가, 삭제, 검색, 정렬, 교체할 수 있습니다.
한편 JsonArray는 문자열로 된 텍스트를 파싱하여 벡터(vector)와 유사한 구조의 객체를 생성하는 데 사용됩니다. 그렇다면 Java의 배열이나 ArrayList를 JsonArray로 변환하려면 어떻게 해야 할까요?
정답은 Gson 라이브러리입니다. Gson 클래스가 제공하는 toJsonTree().getAsJsonArray() 메서드를 사용하면 배열이나 ArrayList를 간단하게 JsonArray로 변환할 수 있습니다.
메서드 문법(Syntax)
public JsonElement toJsonTree(java.lang.Object src)
toJsonTree() 메서드는 전달된 소스 객체(src)를 대응하는 JsonElement 트리 구조로 직렬화하며, 여기에 getAsJsonArray()를 호출하면 최종적으로 JsonArray 형태로 얻을 수 있습니다.
예제 코드(Example)
import com.google.gson.*;
import java.util.*;
public class JavaArrayToJsonArrayTest {
public static void main(String args[]) {
String[][] strArray = {{"elem1-1", "elem1-2"}, {"elem2-1", "elem2-2"}};
ArrayList<ArrayList<String>> arrayList = new ArrayList<>();
for(int i = 0; i < strArray.length; i++) {
ArrayList<String> nextElement = new ArrayList<>();
for(int j = 0; j < strArray[i].length; j++) {
nextElement.add(strArray[i][j] + "-B");
}
arrayList.add(nextElement);
}
JsonObject jsonObj = new JsonObject();
// 배열을 JsonArray로 변환
JsonArray jsonArray1 = new Gson().toJsonTree(strArray).getAsJsonArray();
// ArrayList를 JsonArray로 변환
JsonArray jsonArray2 = new Gson().toJsonTree(arrayList).getAsJsonArray();
jsonObj.add("jsonArray1", jsonArray1);
jsonObj.add("jsonArray2", jsonArray2);
System.out.println(jsonObj.toString());
}
}코드 설명
위 예제는 2차원 문자열 배열(strArray)과 이를 기반으로 만든 중첩 ArrayList를 준비한 뒤, 두 데이터를 각각 JsonArray로 변환하는 과정을 보여줍니다. 변환된 두 개의 JsonArray는 JsonObject에 추가되어 하나의 JSON 문자열로 출력됩니다.
- jsonArray1: 2차원 배열을 그대로 JsonArray로 변환한 결과
- jsonArray2: 각 요소에 "-B"를 붙여 가공한 ArrayList를 JsonArray로 변환한 결과
실행 결과(Output)
{"jsonArray1":[["elem1-1","elem1-2"],["elem2-1","elem2-2"]],"jsonArray2":[["elem1-1-B","elem1-2-B"],["elem2-1-B","elem2-2-B"]]}출력 결과를 보면 배열과 ArrayList 모두 의도한 대로 JSON 배열 구조로 변환된 것을 확인할 수 있습니다. 이처럼 Gson의 toJsonTree() 메서드를 활용하면 복잡한 수동 직렬화 작업 없이도 다양한 Java 컬렉션과 배열을 손쉽게 JSON 형식으로 다룰 수 있습니다.