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

Java에서 Jackson 라이브러리로 CSV를 JSON으로 변환하는 방법

Jackson은 JSON을 다양한 방식으로 처리할 수 있게 해주는 대표적인 Java JSON API입니다. 이 라이브러리의 CsvMapper 클래스를 사용하면 CSV 데이터를 손쉽게 JSON 데이터로 변환할 수 있습니다.

CsvMapper는 ObjectMapper를 특수화한 클래스로, POJO(Plain Old Java Object)로부터 CsvSchema 인스턴스를 생성하는 확장 기능을 제공합니다. 또한 reader() 메서드를 사용하면 기본 설정이 적용된 ObjectReader 객체를 간편하게 구성할 수 있습니다.

CSV를 JSON으로 변환하려면 먼저 com.fasterxml.jackson.dataformat.csv 패키지를 프로젝트에 추가해야 합니다. Maven을 사용한다면 아래 의존성을 pom.xml에 추가하세요.

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-csv</artifactId>
    <version>2.13.0</version>
</dependency>

예제 코드

다음 예제는 헤더가 포함된 CSV 파일을 읽어 Map 형태의 리스트(JSON과 유사한 구조)로 변환하는 과정을 보여줍니다.

import java.io.*;
import java.util.*;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.dataformat.csv.*;

public class CsvToJsonTest {
    public static void main(String args[]) throws Exception {
        File input = new File("input.csv");
        try {
            // 첫 번째 행을 헤더로 사용하는 CSV 스키마 정의
            CsvSchema csv = CsvSchema.emptySchema().withHeader();
            
            // CsvMapper 생성 및 ObjectReader 구성
            CsvMapper csvMapper = new CsvMapper();
            MappingIterator<Map<?, ?>> mappingIterator =
                    csvMapper.reader()
                             .forType(Map.class)
                             .with(csv)
                             .readValues(input);
            
            // 모든 행을 한 번에 읽어 리스트로 변환
            List<Map<?, ?>> list = mappingIterator.readAll();
            System.out.println(list);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

코드 설명

  • CsvSchema.emptySchema().withHeader(): 빈 스키마를 생성하고, CSV 파일의 첫 번째 행을 컬럼 이름(헤더)으로 인식하도록 설정합니다.
  • csvMapper.reader().forType(Map.class): 각 CSV 행을 키-값 쌍으로 이루어진 Map 객체로 매핑합니다.
  • readValues(input): 파일을 순차적으로 읽어 MappingIterator를 반환합니다.
  • readAll(): 반복자의 모든 데이터를 List 형태로 한꺼번에 가져옵니다.

실행 결과

예를 들어 input.csv 파일에 다음과 같은 내용이 있다면,

first name,last name,location
Ravi,Chandra,Bangalore

프로그램 실행 시 아래와 같은 결과가 출력됩니다.

[{last name=Chandra, first name=Ravi, location=Bangalore}]

이처럼 Jackson의 CsvMapper를 활용하면 별도의 파싱 로직 없이도 CSV 데이터를 JSON 친화적인 구조로 간단하게 변환할 수 있습니다. 대용량 파일을 처리할 때는 readAll() 대신 MappingIterator를 순회하며 한 행씩 처리하는 방식을 사용하면 메모리 사용량을 줄일 수 있습니다.