JSON은 데이터 교환 형식(data-interchange format)으로 널리 사용되며, 가볍고(lightweight) 언어에 독립적(language independent)이라는 강점을 가지고 있습니다. JSONArray는 문자열로부터 텍스트를 파싱하여 벡터(vector)와 유사한 객체를 생성하며, java.util.List 인터페이스를 지원합니다.
JSON 배열을 CSV 형식으로 변환하려면 org.json.CDL 클래스를 활용하면 됩니다. 이 클래스는 JSONArray를 쉼표로 구분된 텍스트(comma-delimited text)로 변환해 주는 정적 메서드 toString()을 제공합니다. 또한 변환된 데이터를 CSV 파일로 저장하려면 writeStringToFile() 메서드를 사용할 수 있도록 org.apache.commons.io.FileUtils 패키지를 임포트해야 합니다.
문법(Syntax)
public static java.lang.String toString(JSONArray ja) throws JSONException
아래 예제를 통해 JSON 배열을 CSV 형식으로 변환하는 전체 과정을 확인할 수 있습니다.
예제(Example)
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.json.*;
public class ConvertJsonToCSVTest {
public static void main(String[] args) throws JSONException {
String jsonArrayString = "{\"fileName\": [{\"first name\": \"Ravi\",\"last name\": \"Chandra\",\"location\": \"Bangalore\"}]}";
JSONObject output;
try {
output = new JSONObject(jsonArrayString);
JSONArray docs = output.getJSONArray("fileName");
File file = new File("EmpDetails.csv");
String csv = CDL.toString(docs);
FileUtils.writeStringToFile(file, csv);
System.out.println("Data has been Sucessfully Writeen to "+ file);
System.out.println(csv);
}
catch(Exception e) {
e.printStackTrace();
}
}
}
실행 결과(Output)
Data has been Sucessfully Writeen to EmpDetails.csv last name,first name,location Chandra,Ravi,Bangalore
동작 방식 설명
CDL.toString() 메서드는 JSONArray 내부의 각 JSONObject에서 키(key) 값을 추출하여 첫 번째 행인 헤더(header)로 사용하고, 그 아래에 해당 값들을 쉼표로 구분하여 배치합니다. 위 실행 결과에서 확인할 수 있듯이 'last name', 'first name', 'location'이 헤더 행으로 생성되며, 두 번째 행에는 실제 데이터인 'Chandra, Ravi, Bangalore'가 기록됩니다.
이처럼 org.json.CDL 클래스와 Apache Commons IO 라이브러리를 함께 사용하면 몇 줄의 코드만으로 JSON 배열 데이터를 손쉽게 CSV 파일로 변환하고 저장할 수 있습니다.