ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] JSON 라이브러리 : GSON
    Android 2021. 4. 12. 19:48
    반응형

     

    Json이란?

    Json(JavaScript Object Notiation)은 키-값(key-value)로 이루어진 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷이다.

    자바스크립트 뿐만 아니라 여러 프로그래밍에서 사용된다.

    읽고 쓰는 것이 간단하고, 언어 독립적이며, XML보다 가볍다는 장점이 있어서 네트워크 통신에서 자주 사용된다.

    기본 구조

    json은 하나의 문자열로 구성되며 "{key : value}"의 객체 형태를 기본으로 하고 콤마(,)로 구분된다.

    value에는 문자열, 숫자, 배열, boolean값과 다른 객체를 포함할 수 있다. (자바스크립트 객체 표현 방식과 거의 동일하다.)

    {
        "이름": "홍길동",
        "나이": 25,
        "성별": "여",
        "주소": "서울특별시 양천구 목동",
        "특기": ["농구", "도술"],
        "가족관계": {"#": 2, "아버지": "홍판서", "어머니": "춘섬"},
        "회사": "경기 수원시 팔달구 우만동"
     }

     

    Android에서 Json다루기

    안드로이드 플랫폼에서는 별도의 라이브러리를 추가하지 않아도 기본적으로 json을 다룰 수 있는 json.org 패키지를 제공한다.

    JSONObject, JsonArray 클래스는 전달받은 문자열을 파싱하여 객체화하고, key를 통해 value를 얻을 수 있는 메서드를 제공한다.

    자세한 사용법은 아래 문서를 참고!

    org.json | Android Developers

    Gson 라이브러리

    Gson는 google에서 제공하는 Java 라이브러리로 Java 객체를 Json으로 변환 또는 Json을 Java 객체로 변환하는 데 사용된다.

    Gson은 java의 기본적인 데이터 객체 뿐만 아니라 사용자가 정의한 데이터 클래스로도 간편하게 변환이 가능해서 많이 사용되고 있다.

    라이브러리 추가

    build.gradle에 gson을 추가해줍니다.

    dependencies {
    	...
    
      implementation 'com.google.code.gson:gson:2.8.6'
    }

    변환할 클래스 생성

    먼저 대상이 되는 포맷에 맞게 클래스를 생성한다.

    public class Movie {
    	String name;
    	String rank;
    	String director;
    	...
    }

     

    JSON → Object

    String json = "{\"name\" : \"제목\", \"rank\" : \"등급\", \"diractor\": \"감독\", ...}"
    Gson gson = new Gson();
    Movie obj = gson.fromJson(json, Movie.class);

    Gson의 fromJson()의 메서드에 json과 변환할 클래스를 지정해준다.

     

    Java 기본 데이터 클래스도 마찬가지로 두번째 파라미터에 데이터 타입에 맞게 클래스를 넣어준다.

    int one = gson.fromJson("1", int.class);
    Integer one = gson.fromJson("1", Integer.class);
    Long one = gson.fromJson("1", Long.class);
    Boolean false = gson.fromJson("false", Boolean.class);
    String str = gson.fromJson("\"abc\"", String.class);
    String[] anotherStr = gson.fromJson("[\"abc\"]", String[].class);

     

    Object → JSON

    Movie obj = new Movie("제목", "등급", "감독", ..);
    Gson gson = new Gson();
    String json = gson.toJson(obj);

    fromJson()과 마찬가지로 toJson() 메서드를 호출해서 간단하게 변환 가능하다.

     

    여러 형식으로 변환하기

    gson이 편리한 이유는 중첩 클래스와 배열, 컬렉션 타입을 처리하기 편하다는 점인데, 사용방법은 위와 다르지 않다.

    자세한건 gson 사용자 가이드 참고.

     

     

     

     


    +)

    gson는 웹을 하면서 많이 다뤄봐서 간단하게 정리했다.

     

    json 파싱으로 Moshi라이브러리를 사용한적이 있는데,

    문제가 됐던 부분은 null을 파싱하려하면 JsonDataException이 발생한 부분이였다.

     

    gson에서는 null값을 무시하기 때문에 에러는 발생하지 않지만,

    null을 표기하기 위해서는 GsonBuilder 클래스를 사용해서 serializeNulls() 옵션을 추가한다면 처리 가능하다고 하니 참고.

    댓글