JSON(JavaScript Object Notation)은 사람이 읽고 쓰기 쉬운 형태로 설계된 경량의 텍스트 기반 개방형 데이터 교환 표준입니다. C, C++, Java, Python, Perl 등 주요 프로그래밍 언어의 문법 규약과 유사하기 때문에 프로그래머에게 매우 친숙하며, 서로 다른 시스템 간에 데이터를 주고받는 데 폭넓게 활용됩니다.
Java에서는 JSON 객체를 처리할 수 있는 라이브러리가 여러 가지 있습니다. 그중 Jackson은 Java 객체를 JSON으로 직렬화하고, 반대로 JSON을 Java 객체로 역직렬화할 수 있는 가볍고 사용하기 쉬운 Java 기반 라이브러리입니다.
Jackson으로 Java 객체를 JSON으로 변환하기
Jackson API의 핵심 클래스인 ObjectMapper는 Java 객체를 JSON으로 변환하거나 그 반대 작업을 수행하는 다양한 메서드를 제공합니다.
특히 이 클래스의 writeValueAsString() 메서드는 Java 객체를 인자로 받아, 해당 객체를 직렬화한 결과인 JSON 문자열을 반환합니다.
Jackson 라이브러리를 사용해 Java 객체를 JSON 문자열로 변환하는 절차는 다음과 같습니다.
- pom.xml 파일에 아래의 Maven 의존성을 추가합니다.
- private 필드와 setter/getter 메서드를 가진 자바빈(POJO) 클래스를 생성합니다.
- POJO 클래스에 접근할 수 있는 별도의 실행 클래스를 만듭니다.
- POJO 객체를 생성하고 setter 메서드를 통해 필요한 값을 설정합니다.
- ObjectMapper 클래스의 인스턴스를 생성합니다.
- 앞에서 만든 POJO 객체를 인자로 전달하며 writeValueAsString() 메서드를 호출합니다.
- 반환된 JSON 문자열을 받아 출력합니다.
1단계: Maven 의존성 추가
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0.pr2</version>
</dependency>
2단계: 예제 코드
아래 예제에서는 Student라는 POJO 클래스를 정의하고, ObjectMapper를 사용해 이 객체를 JSON 문자열로 변환합니다.
import com.fasterxml.jackson.databind.ObjectMapper;
class Student {
private int id;
private String name;
private int age;
private long phone;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public long getPhone() {
return phone;
}
public void setPhone(long phone) {
this.phone = phone;
}
}
public class JacksonExample {
public static void main(String args[]) throws Exception {
Student std = new Student();
std.setId(1);
std.setName("Krishna");
std.setAge(30);
std.setPhone(9848022338L);
// ObjectMapper 객체 생성
ObjectMapper mapper = new ObjectMapper();
// 객체를 JSON 문자열로 변환
String jsonString = mapper.writeValueAsString(std);
System.out.println(jsonString);
}
}
실행 결과
{"id":1,"name":"Krishna","age":30,"phone":9848022338}
참고: JSON을 Java 객체로 변환하기
반대로 JSON 문자열을 Java 객체로 되돌릴 때는 동일한 ObjectMapper의 readValue() 메서드를 사용하면 됩니다. 예를 들어 mapper.readValue(jsonString, Student.class)와 같이 호출하면 JSON 문자열이 Student 객체로 역직렬화됩니다. 이처럼 Jackson의 ObjectMapper 하나만으로 직렬화와 역직렬화를 모두 손쉽게 처리할 수 있습니다.