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

Java 객체를 JSON으로 변환하는 방법 – Jackson과 Gson 활용 가이드

이 튜토리얼에서는 대표적인 두 가지 라이브러리인 JacksonGson을 사용하여 자바 객체를 JSON으로 변환하는 방법을 알아봅니다.


예제에서는 일반적인 POJO(Plain Old Java Object)인 Person 클래스를 사용합니다. Person 객체를 생성한 후, 각 라이브러리를 통해 어떻게 JSON으로 직렬화하는지 살펴보겠습니다.

Person 클래스 정의

Person.java

import java.util.List;
import java.util.Map;

public class Person {

    String name;
    Integer age;
    List<String> hobbies;
    Map<String, String> languages;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public List<String> getHobbies() {
        return hobbies;
    }

    public void setHobbies(List<String> hobbies) {
        this.hobbies = hobbies;
    }

    public Map<String, String> getLanguages() {
        return languages;
    }

    public void setLanguages(Map<String, String> languages) {
        this.languages = languages;
    }
}

위 클래스는 이름(name), 나이(age), 취미 목록(hobbies), 언어 실력(languages) 네 개의 필드를 가지고 있으며, getter와 setter 메서드를 포함하고 있습니다.

Jackson을 사용해 Java 객체를 JSON으로 변환하기

Jackson 라이브러리의 ObjectMapper 클래스를 사용하면 자바 객체를 손쉽게 JSON으로 변환할 수 있습니다.

ObjectMapper는 변환된 JSON을 파일에 쓰거나 문자열(String) 형태로 반환하는 다양한 메서드를 제공합니다.

다음 예제에서는 JSON을 파일로 저장하는 동시에, pretty print 기능을 사용해 보기 좋게 포맷팅된 JSON 문자열도 출력합니다.

먼저 Maven을 통해 Jackson 라이브러리를 가져오기 위해 pom.xml 파일에 아래 의존성을 추가합니다.

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.10.2</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.10.2</version>
</dependency>

ConvertJavaObjectToJson.java

import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ConvertJavaObjectToJson {

    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        Person person = newPerson();

        try {
            mapper.writeValue(new File("person.json"), person);
            String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(person);
            System.out.println(jsonString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static Person newPerson() {
        Person person = new Person();

        List<String> hobbies = new ArrayList<>();
        hobbies.add("Football");
        hobbies.add("Cooking");
        hobbies.add("Swimming");

        Map<String, String> languages = new HashMap<>();
        languages.put("French", "Beginner");
        languages.put("German", "Intermediate");
        languages.put("Spanish", "Advanced");

        person.setName("David");
        person.setAge(30);
        person.setHobbies(hobbies);
        person.setLanguages(languages);

        return person;
    }
}

출력 결과:

{
  "name" : "David",
  "age" : 30,
  "hobbies" : [ "Football", "Cooking", "Swimming" ],
  "languages" : {
    "French" : "Beginner",
    "German" : "Intermediate",
    "Spanish" : "Advanced"
  }
}

프로그램을 실행하면 위와 같은 포맷팅된 JSON이 콘솔에 출력되고, 동시에 프로젝트 작업 디렉터리에 person.json 파일도 생성됩니다.

  • Java에서 JSON 파싱하는 방법
  • Java Map을 JSON으로 변환하는 방법
  • JSON 인코딩 및 디코딩 방법

Gson을 사용해 Java 객체를 JSON으로 변환하기

Google에서 제공하는 Gson은 더욱 간결한 API로 JSON 직렬화를 지원합니다. 먼저 pom.xml에 의존성을 추가합니다.

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
</dependency>

그다음 Gson 인스턴스를 생성하고 toJson() 메서드를 호출하면 됩니다.

import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ConvertJavaObjectToJson {

    public static void main(String[] args) {
        Gson gson = new Gson();
        Person person = newPerson();
        String jsonString = gson.toJson(person);
        System.out.println(jsonString);
    }

    private static Person newPerson() {
        Person person = new Person();

        List<String> hobbies = new ArrayList<>();
        hobbies.add("Football");
        hobbies.add("Cooking");
        hobbies.add("Swimming");

        Map<String, String> languages = new HashMap<>();
        languages.put("French", "Beginner");
        languages.put("German", "Intermediate");
        languages.put("Spanish", "Advanced");

        person.setName("David");
        person.setAge(30);
        person.setHobbies(hobbies);
        person.setLanguages(languages);

        return person;
    }
}

출력 결과:

{"name":"David","age":30,"hobbies":["Football","Cooking","Swimming"],"languages":{"French":"Beginner","German":"Intermediate","Spanish":"Advanced"}}

Gson은 기본적으로 압축된(compact) 형태의 JSON을 한 줄로 출력한다는 점이 Jackson과의 차이점입니다. 만약 보기 편한 들여쓰기가 필요하다면 new GsonBuilder().setPrettyPrinting().create()를 사용해 Gson 인스턴스를 생성하면 됩니다.

정리

두 라이브러리 모두 자바 객체를 JSON으로 변환하는 데 널리 사용됩니다. 복잡한 설정이나 다양한 기능이 필요하다면 Jackson이 유리하고, 간단하고 가벼운 사용법을 원한다면 Gson이 좋은 선택입니다. 프로젝트의 요구 사항에 맞는 라이브러리를 선택해 적용해 보세요.