ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] GSON 라이브러리 사용하기
    프로그래밍/Android 2019. 1. 17. 12:12

    오늘은 간단하게 Gson 라이브러리에 대해 알아 볼 텐데요. Gson 라이브러리도 여러 종류가 있지만, 오늘 소개할 라이브러리는 Google에서 제공하는 오픈 소스 라이브러리 입니다. 다른 라이브러리들도 사용법은 비슷하기에 알아두시면 다른 라이브러리에도 쉽게 접근하실 수 있으실 겁니다.


    그럼 시작하겠습니다.!




    GSON 라이브러리?

    GSON 라이브러리는 Java Object를 JSON으로 또는, JSON을 Java Object로의 변환을 도와주는 라이브러리입니다.


    JSON?


    JSON은 JavaScript Object Notation의 약자로 Name과 Value로 이루어진 하나의 텍스트 형식입니다.

    JSON은 언어로부터 독립적이기 때문에 다수의 언어(C, C++, C#, java, javaScript 등)간의 데이터 교환에 사용됩니다.


    JSON에서는 기본적으로 key : value 형태로 데이터를 표현합니다, 또한 데이터들을 묶어 Object(중괄호 { }로 표기)와 Array(대괄호 [ ]로 표기) 형태로 표현합니다.


    일단 사용 해볼까요?



    JSON 파일 준비하기

    라이브러리를 사용하기에 앞서, 우선 JSON 파일을 작성하겠습니다. 

    데이터가 이미 있으신 분들은 건너뛰셔도 무방합니다.


    album.json



    "album" : [

    { "title" : "BINGLE BANGLE",

      "artist" : "AOA",

      "thumb"

    "https://musicmeta-phinf.pstatic.net/album/002/459/2459722.jpg?type=r204Fll&v=20181212201500",

      "date" : "2018.05.28",

      "type" : "댄스",

      "song"

    ["빙글뱅글 (BINGLE BANGLE)", "Super Duper", "HEAT", "Ladi Dadi", "파르페", "뚜뚜뚜"],

      "introduce"

    "올 여름을 강타할 AOA표 서머송!\nAOA의 상큼발랄 펑키팝 '빙글뱅글 (Bingle Bangle)'\n\n그룹 AOA가 경쾌하고 신나는 퍼포먼스로 돌아왔다."},


    "title" : "RBB",

      "artist" : "Red Velvet",

      "thumb"

    "https://musicmeta-phinf.pstatic.net/album/002/652/2652254.jpg?type=r204Fll&v=20181211115148",

      "date" : "2018.11.30",

      "type" : "댄스, 알앤비/어반",

      "song"

    ["RBB (Really Bad Boy)", "Bufferflies", "So Good", "멋있게 (Sassy Me)", "Taste", "RBB (Really Bad Boy) (English Ver."],

      "introduce"

    "'대체불가 걸그룹' 레드벨벳, 2018 연말 가요계도 점령한다!\n새 미니앨범 'RBB' 공개!\n타이틀 곡 'RBB (Really Bad Boy)'로 히트 행진 잇는다!"},


    "title" : "Circular"

      "artist" : "M.C THE MAX",,

      "thumb"

    "https://musicmeta-phinf.pstatic.net/album/002/798/2798709.jpg?type=r204Fll&v=20190104184015",

      "date" : "2019.01.02",

      "type" : "발라드",

      "song"

    ["사계 (하루살이)", "넘쳐흘러", "시간을 견디면", "그걸로 나는 충분해요", "너의 목소리가 들려", "물그림", "가", "Eh-O!", "Circular OP.1 (Crevasse)", "Circular OP.2 (Restored)", "사계 (하루살이) (Inst.)", "넘쳐흘러 (Inst.)", "그걸로 나는 충분해요 (Inst.)", "물그림 (Inst.)"],

      "introduce"

    "'엠씨더맥스' 3년 만의 정규 앨범, 9집 [Circular] 발매!\n\n3년이라는 긴 공백 끝에 정규 9집 [Circular]로 돌아온 '엠씨더맥스'!"},

    ]}


    예제를 위해서 위에 작성 된 Json을 파일로 프로젝트로 추가하도록 하겠습니다.


    assets/album.json


    위의 그림과 같이 assets 폴더 생성 후, 안에 json 파일을 넣었습니다.

    자, 이제 이 JSON을 GSON을 사용하여 안드로이드에서 사용할 수 있도록 Java Object 형태로 변환하는 법에 대해 먼저 알아보겠습니다.



    Gradle에 라이브러리 추가하기

    GSON 라이브러리를 사용하려면 Gradle에 등록해야 합니다.


    build.fradle (Module: app)



    dependencies {

    implementation 'com.google.code.gson:gson:2.8.5'

    }



    데이터 VO 클래스 작성하기

    Json 데이터들을 파싱하기 전에, 먼저 데이터를 담을 그릇이 필요하겠죠?

    각 앨범에 대한 정보들을 담을 VO 클래스를 작성하겠습니다.


    AlbumVO.java



    public class AlbumVO {

        private String thumb;

        private String artist;

        private String date;

        private String type;

        private String title;

        private ArrayList<String> song;

        private String introduce;


        public String getThumb() {

            return thumb;

        }


        public void setThumb(String thumb) {

            this.thumb = thumb;

        }


        public String getArtist() {

            return artist;

        }


        public void setArtist(String artist) {

            this.artist = artist;

        }


        public String getDate() {

            return date;

        }


        public void setDate(String date) {

            this.date = date;

        }


        public String getType() {

            return type;

        }


        public void setType(String type) {

            this.type = type;

        }


        public String getTitle() {

            return title;

        }


        public void setTitle(String title) {

            this.title = title;

        }


        public ArrayList<String> getSong() {

            return song;

        }


        public void setSong(ArrayList<String> song) {

            this.song = song;

        }


        public String getIntroduce() {

            return introduce;

        }


        public void setIntroduce(String introduce) {

            this.introduce = introduce;

        }


        @Override

        public String toString() {

            return "AlbumVO{" +

                    "thumb='" + thumb + '\'' +

                    ", artist='" + artist + '\'' +

                    ", date='" + date + '\'' +

                    ", type='" + type + '\'' +

                    ", title='" + title + '\'' +

                    ", song=" + song +

                    ", introduce='" + introduce + '\'' +

                    '}';

        }

    }


    작성할 때 주의하실 점은 JSON에 작성하신 key와 동일하게 변수 명을 작성하셔야 합니다. 

    이어서, Activity에서 json파일을 불러와 파싱 하는 법을 살펴보겠습니다.



    JSON 데이터 파싱하기


    MainActivity.java


    private ArrayList<AlbumVO> getAlbumList() {

    ArrayList<AlbumVO> list_album = new ArrayList<>();

    Gson gson = new Gson();


    try {

    InputStream is = getAssets().open("album.json");

    byte[] buffer = new byte[is.available()];

    is.read(buffer);

    is.close();

    String json = new String(buffer, "UTF-8");


    JSONObject jsonObject = new JSONObject(json);

    JSONArray jsonArray = jsonObject.getJSONArray("album");


    int index = 0;

    while (index < jsonArray.length()) {

    AlbumVO albumVO = gson.fromJson(jsonArray.get(index).toString(), AlbumVO.class);

    list_album.add(albumVO);


    index++;

    }


    } catch (Exception e) {

    e.printStackTrace();

    }


    return list_album;

    }


    먼저, InputStream을 열어 assets 폴더에 있는 album.json을 가져와 String 타입으로 데이터를 담았습니다.

    이 상태에서는 모든 데이터가 하나의 String 타입의 문자들로 이루어져 있기 때문에 원하는 데이터를 가져오기에 어려움이 있습니다.

    하여, 데이터를 각각의 앨범 단위로 나누어 AlbumVO에 담아 원하는 데이터에 접근하기 쉽도록 하겠습니다.


    각 앨범의 정보를 각각의 AlbumVO에 담기 위해서 데이터를 앨범 단위로 나누어야 하겠죠? 

    JSONObject로 변환한 뒤, album이라는 key를 이용해 데이터를 JSONArray 형태로 변환하였습니다.

    이제 JsonArray의 각 포지션마다 다른 앨범의 정보들을 가지고 있겠네요.


    여기서 각각의 정보에 대한 name 값을 통해 각 데이터에 접근하여 각 데이터들을 AlbumVO에 담아도 되겠지만, 우리는 GSON 라이브러리를 사용해 한번에 해결하도록 하겠습니다. 


    GSON 라이브러리에도 여러가지 기능들이 있지만, 간단하게 변환에 관련되어 자주 쓰이는 것만 소개하도록 하겠습니다.

    자세한 라이브러리에 대한 내용은 API Javadoc을 확인해주시길 바랍니다.


    • fromJson()

    - JSON 형식의 데이터를 지정한 타입의 데이터로 변환합니다.


    • toJson()

    - 지정된 타입의 데이터를 JSON 형식의 데이터로 변환합니다.


    위의 예제를 예시로 들면 다음과 같이 데이터가 변환되는 것을 알 수 있습니다.


    Json

    AlbumVO

     { 

       "title" : "BINGLE BANGLE",

       "artist" : "AOA",

       "thumb" : "https://musicmetaphinf...",

       "date" : "2018.05.28",

       "type" : "댄스",

       "song" : ["빙글뱅글 (BINGLE BANGLE)", ... ],

       "introduce" : "올 여름을 강타할 AOA ... "

    }

     public Class AlbumVO {

        private String title = "BINGLE BANGLE";

        private String artist = "AOA";

        private String thumb = "https://musicmetaphinf...";

        private String date = "2018.05.28";

        private String type = "댄스";

        private ArrayList<String> song = {"빙글뱅글 (BINGLE BANGLE)", ... };

        private String introduce = "올 여름을 강타할 AOA ... ";

    }





    사실 설명 할 부분이 거의 없어 글이 괜히 길어진 느낌이네요.. 자세한 내용들은 API 문서에 전부 있어 따로 설명드릴 것도 없기에, 이런 것도 있구나 정도로 봐주시면 감사하겠습니다. 







Designed by Tistory.