[Java] Java 객체를 Json으로/에서 변환하는 방법 (Jackson)

Yuri Lee·2021년 5월 3일
5
post-custom-banner

Jackson 이란?

  • Java Object를 Json으로 변환하거나 Json을 Java Object로 변환하는데 사용할 수 있는 Java 라이브러리이다.

특징

  • Stream API : 스트림 형식으로 데이터를 분석하고 생성하기 때문에 성능이 좋다.
  • Tree Model : XML의 DOM 처럼 Node 형태로 데이터를 다룰 수 있기 때문에 유연성이 좋다.
  • Data Binding : POJO 기반의 자바 객체들을 Json으로 변환시킬 수 있다.
    -
    • POJO(Plain old Java Object) : 특별한 제한에 종속되지 않고, 클래스 패스(class path)를 필요로 하지 않는 일반적인 Java Object 이다. 주요 Java 오브젝트 모델, 컨벤션 또는 프레임워크를 따르지 않는 Java 오브젝트를 나타낸다.

Quick Reference

1.1 Convert Java object to JSON, writeValue(...)

ObjectMapper mapper = new ObjectMapper();
User user = new User();

//Object to JSON in file
mapper.writeValue(new File("c:\\user.json"), user);

//Object to JSON in String
String jsonInString = mapper.writeValueAsString(user);

1.2 Convert JSON to Java object, readValue(...)

ObjectMapper mapper = new ObjectMapper();
String jsonInString = "{'name' : 'mkyong'}";

//JSON from file to Object
User user = mapper.readValue(new File("c:\\user.json"), User.class);

//JSON from String to Object
User user = mapper.readValue(jsonInString, User.class);

Jackson Dependency

    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.13</version>
    </dependency>

POJO (Plain Old Java Object)

User.java

package com.mkyong.json;
import java.util.List;
public class User {
    private String name;
    private int age;
    private List<String> messages;
    //getters and setters
}

Java Object to JSON

Convert an user object into a JSON formatted string.
JacksonExample.java

package com.mkyong.json;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class JacksonExample {
    public static void main(String[] args) {

        ObjectMapper mapper = new ObjectMapper();

        //For testing
        User user = createDummyUser();
        
        try {
            //Convert object to JSON string and save into file directly 
            mapper.writeValue(new File("D:\\user.json"), user);
            
            //Convert object to JSON string
            String jsonInString = mapper.writeValueAsString(user);
            System.out.println(jsonInString);
            
            //Convert object to JSON string and pretty print
            jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);
            System.out.println(jsonInString);
            
            
        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private static User createDummyUser(){
        
        User user = new User();
        
        user.setName("mkyong");
        user.setAge(33);

        List<String> msg = new ArrayList<>();
        msg.add("hello jackson 1");
        msg.add("hello jackson 2");
        msg.add("hello jackson 3");

        user.setMessages(msg);
        
        return user;
        
    }
}

output

//new json file is created in D:\\user.json"

{"name":"mkyong","age":33,"messages":["hello jackson 1","hello jackson 2","hello jackson 3"]}

{
  "name" : "mkyong",
  "age" : 33,
  "messages" : [ "hello jackson 1", "hello jackson 2", "hello jackson 3" ]
}

JSON to Java Object

package com.mkyong.json;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class JacksonExample {
    public static void main(String[] args) {

        ObjectMapper mapper = new ObjectMapper();

        try {

            // Convert JSON string from file to Object
            User user = mapper.readValue(new File("G:\\user.json"), User.class);
            System.out.println(user);

            // Convert JSON string to Object
            String jsonInString = "{\"age\":33,\"messages\":[\"msg 1\",\"msg 2\"],\"name\":\"mkyong\"}";
            User user1 = mapper.readValue(jsonInString, User.class);
            System.out.println(user1);

        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

output

User [name=mkyong, age=33, messages=[hello jackson 1, hello jackson 2, hello jackson 3]]

User [name=mkyong, age=33, messages=[msg 1, msg 2]]

https://github.com/FasterXML/jackson
https://mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/
https://soulduse.tistory.com/22
https://velog.io/@dion/what-is-POJO

profile
Step by step goes a long way ✨
post-custom-banner

1개의 댓글

comment-user-thumbnail
2022년 4월 25일

좋은 글 감사합니다. 잘 보고 갑니다

답글 달기