어제 오늘 내일

[Java] Jackson 라이브러리를 이용하여 JSON을 Object로 변환하기 본문

IT/Java

[Java] Jackson 라이브러리를 이용하여 JSON을 Object로 변환하기

hi.anna 2021. 9. 5. 00:38

Jackson 라이브러리를 이용하여

JSON 문자열을 Java Object로 변환하는 방법을 정리하였습니다.

 

  1. Jackson 라이브러리 설치
  2. JSON 문자열 -> Java Object
  3. JSON 문자열 -> Map
  4. JSON Array 문자열 -> Java Object 배열
  5. JSON Array 문자열 -> Java Object List
  6. JSON 파일 -> Java Object
  7. Input Stream JSON -> Java Object

 

 

1. Jackson 라이브러리 설치

Java JSON 라이브러리로 많이 알려진 Jackson 라이브러리는 크게 3가지 라이브러리로 구성되어 있습니다.

Jackson-annotations는 Jackson-core를 사용하고, 

Jackson-databind는 Jackson-annotations 라이브러리를 사용합니다.

따라서, Jackson-databind를 maven dependency에 추가하면

나머지 라이브러리들도 설치됩니다.

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

 

 

2. JSON 문자열 -> Java Object

Jackson의 ObejctMapper 라이브러리를 이용하여

JSON 문자열을 지정한 Java Object로 맵핑하여 변환 할 수 있습니다.

 

  Student.java  

public class Student {

    private int id;
    private String name;

    public Student() {
    }

    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }

    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;
    }

    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + "]";
    }
}

아래 예제에서 JSON 문자열을  Student 객체로 변환 할 것입니다.

Student 클래스는

id, name 필드를 가지고 있고,

id, name에 대한 getter, setter 메소드를 가지고 있습니다.

 

  JsonStringToObject.java  

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonStringToObject {
    public static void main(String[] args) throws JsonMappingException, JsonProcessingException {

        // {"id" : 1, "name" : "Anna"}
        String jsonStr = "{\"id\" : 1, \"name\" : \"Anna\"}";

        // jackson objectmapper 객체 생성
        ObjectMapper objectMapper = new ObjectMapper();

        // JSON String -> Student Object
        Student student = objectMapper.readValue(jsonStr, Student.class);

        // Student 객체 출력
        System.out.println(student);  // Student [id=1, name=Anna]

    }
}

Student student = objectMapper.readValue(jsonStr, Student.class);

ObjectMapper의 readValue() 메소드를 이용하여

JSON 문자열을 Student 객체로 변환하였습니다.

 

readValue()의 첫번째 파라미터로는, 변환 대상 JSON 문자열을 입력하였습니다.

첫번째 파라미터 자리에는 위 예제처럼 JSON 문자열 뿐만 아니라, stream, file 형태가 들어갈 수도 있습니다.

두번째 파라미터에는, JSON을 변환하여 만들 객체의 타입을 넣어줍니다.

여기서는, Student 클래스를 넣어주었습니다.

 

ObjectMapper는 JSON을 객체로 맵핑할 때,

JSON의 이름과 객체의 getter, setter 메소드의 필드명을 비교하여 자동으로 맵핑해줍니다.

 

 

3. JSON 문자열 -> Map

import java.util.Map;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonStringToMap {
    public static void main(String[] args) throws JsonMappingException, JsonProcessingException {

        // {"id" : 1, "name" : "Anna"}
        String jsonStr = "{\"id\" : 1, \"name\" : \"Anna\"}";

        // jackson objectmapper 객체 생성
        ObjectMapper objectMapper = new ObjectMapper();

        // JSON String -> Map
        Map<String, Object> jsonMap 
            = objectMapper.readValue(jsonStr, new TypeReference<Map<String, Object>>() {});

        // Student 객체 출력
        System.out.println(jsonMap);  // {id=1, name=Anna}
    }
}

역시, ObjectMapper의 readValue() 메소드를 사용하여

JSON 문자열을 Map으로 변경하였습니다.

 

 

4. JSON Array 문자열 -> Java Object 배열

import java.util.Arrays;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonArrayStringToObjectArray {
    public static void main(String[] args) throws JsonMappingException, JsonProcessingException {

        // [{"id" : 1, "name" : "Anna"}, {"id" : 2, "name" : "Brian"}]
        String jsonArrStr = "[{\"id\" : 1, \"name\" : \"Anna\"}, {\"id\" : 2, \"name\" : \"Brian\"}]";

        // jackson objectmapper 객체 생성
        ObjectMapper objectMapper = new ObjectMapper();

        // JSON Array String -> 배열
        Student[] studentArr = objectMapper.readValue(jsonArrStr, Student[].class);

        // 배열 객체 출력
        System.out.println(Arrays.toString(studentArr)); // [Student [id=1, name=Anna], Student [id=2, name=Brian]]

    }
}

배열 형태의 JSON을 배열 객체로 변경하였습니다.

 

 

5. JSON Array 문자열 -> Java Object List

import java.util.List;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonArrayStringToObjectList {
    public static void main(String[] args) throws JsonMappingException, JsonProcessingException {

        // [{"id" : 1, "name" : "Anna"}, {"id" : 2, "name" : "Brian"}]
        String jsonArrStr = "[{\"id\" : 1, \"name\" : \"Anna\"}, {\"id\" : 2, \"name\" : \"Brian\"}]";

        // jackson objectmapper 객체 생성
        ObjectMapper objectMapper = new ObjectMapper();

        // JSON Array String -> List
        List<Student> studentList 
            = objectMapper.readValue(jsonArrStr, new TypeReference<List<Student>>() {});

        // List 객체 출력
        System.out.println(studentList); // [Student [id=1, name=Anna], Student [id=2, name=Brian]]

    }
}

배열 형태의 JSON을 List 객체로 변환하였습니다.

 

 

6. JSON 파일 -> Java Object

  student.json  

{
    "id": 1,
    "name": "Anna"
}

먼저, 읽어들일 json파일(student.json)을 생성하였습니다.

 

import java.io.File;
import java.io.IOException;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonFileToObject {
    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {

        // {"id" : 1, "name" : "Anna"}
        File file = new File("c://student.json");

        // jackson objectmapper 객체 생성
        ObjectMapper objectMapper = new ObjectMapper();

        // JSON File -> Student Object
        Student student = objectMapper.readValue(file, Student.class);

        // Student 객체 출력
        System.out.println(student); // Student [id=1, name=Anna]
    }
}

JSON 파일을 읽어서, 파일의 내용을 객체로 변환하였습니다.

 

 

7. Input Stream JSON -> Java Object

mport java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonInputStreamToObject {
    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {

        // {"id" : 1, "name" : "Anna"}
        InputStream input = new FileInputStream("c://student.json");

        // jackson objectmapper 객체 생성
        ObjectMapper objectMapper = new ObjectMapper();

        // JSON InputStream -> Student Object
        Student student = objectMapper.readValue(input, Student.class);

        // Student 객체 출력
        System.out.println(student); // Student [id=1, name=Anna]
    }
}

JSON InputStream을 읽어서, 객체로 변환하였습니다.

 

 


 

Jackson 라이브러리를 사용하여

JSON 문자열을 Java 객체로 변경하는 방법을 알아보았습니다.

 

 

 

반응형
Comments