개발을 하다보면 json을 통해서 정보전달을 하는 경우가 많다. 그 때 gson, jackson 등 여러가지가 library를 취향껏 사용하면 되는데, 오늘은 google에서 나온 gson을 이용한 object mapping을 설명하겠다.

 

1. gradle에 gson 추가

먼저, gson 을 사용하기 위해서 gradle에 추가해야 한다.

최신 gson은 아래 링크를 통해 확인 가능하고..

https://mvnrepository.com/artifact/com.google.code.gson/gson

 

Maven Repository: com.google.code.gson » gson

 

mvnrepository.com

이 글을 쓰는 현재 최신 버젼인 2.8.6을 활용 한다.

 

compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6'

 

추가 하고 gradle sync 를 하면 완료

 

2. class 만들기

json을 class로 만들거나, class를 json으로 object mapping 시키기 위해서 우선 대상 class를 만든다.

간략히 아래와 같이 생성...

toString()은 확인을 위해 만든거라서 없어도 무방하다..

 

public class Animal {
    private int nLeg;
    private String name;

    @Override
    public String toString() {
        return "Animal[nLeg: " + nLeg + ", name: " + name + "]";
    }
}

 

3. Object mapping 하기

object mapping을 하기 위한 method는 2가지, fromJson / toJson 이다.

json -> object 는 fromJson

object -> json 은 toJson

 

매우 간단하다.

 

code로 보면 아래와 같다...

String에서 " 큰따옴표를 사용하려면 \" 를 사용해야 함을 유의!!

public class AnimalTest {

    @Test
    public void testJson() {
        Gson gson = new Gson();

        String json = "{\"nLeg\":4, \"name\": \"Bill\"}";
        Animal animal = gson.fromJson(json, Animal.class);
        System.out.println(animal);

        String reJson = gson.toJson(animal);
        System.out.println(reJson);
    }
}

 

결과는?

 

Animal[nLeg: 4, name: Bill]
{"nLeg":4,"name":"Bill"}

 

4. key 이름 변경

본인은 헝가리안 표기법을 좋아하지는 않지만, 개발조직의 coding convention상 m 이나, n 혹은 i 등을 prefix로 사용하여 class의 멤버이름을 설정해 주어야 하는 경우가 있다.

gson을 그냥 활용할 경우 class의 멤버 이름을 그대로 json의 key로 mapping 시키기 때문에, 위의 예제에 nLeg 같은 key를 사용해야 한다. 

멤버의 이름 말고 json key이름을 지정하는 방법은 gson에서 제공하는 annotation으로 해결 가능하다.

사용할 annotation은 @SerializedName("key 이름")

 

2번의 class를 아래와 같이 수정 하고 

 

import com.google.gson.annotations.SerializedName;

public class Animal {
    @SerializedName("legs")
    private int nLeg;

    @SerializedName("name")
    private String name;

    @Override
    public String toString() {
        return "Animal[nLeg: " + nLeg + ", name: " + name + "]";
    }

}

 

3번의 test code에서 json 의 key이름을 수정하여 다시 실행 해보면...

 

public class AnimalTest {

    @Test
    public void testJson() {
        Gson gson = new Gson();

        String json = "{\"legs\":4, \"name\": \"Bill\"}";
        Animal animal = gson.fromJson(json, Animal.class);
        System.out.println(animal);

        String reJson = gson.toJson(animal);
        System.out.println(reJson);
    }
}

legs 를 key로 사용해도 nLeg 변수에 값이 들어가고, 해당 class를 다시 json 화 했을 때도 지정한 key인 legs 로 바뀌는 것을 알 수 있다.

Animal[nLeg: 4, name: Bill]
{"legs":4,"name":"Bill"}

 

위의 code는 아래 github에서 확인 가능하다.

https://github.com/jeng832/blog-example/tree/master/gson

+ Recent posts