본문 바로가기
안드로이드/개발자 일상

안드로이드 JSONObject를 List, Map으로 저장하는 팁

by 차누감 2020. 3. 21.

 

통신 및 JSONObject로 받았는데, 어떻게 데이터를 담을지 잘 이해가 안됩니다.

그래서 쉽게 설명해 드리겠습니다.

 

아래 JSON 형식으로 설명을 드리겠습니다. 보통 dailyBoxOfficeList에서 정보를 사용하겠죠?

{

    "boxOfficeResult": {

        "boxofficeType": "일별 박스오피스",

        "showRange": "20120101~20120101",

        "dailyBoxOfficeList": [{

            "rnum": "1",

            "rank": "1",

            "rankInten": "0",

            "rankOldAndNew": "OLD",

            "movieCd": "20112207",

            "movieNm": "미션임파서블:고스트프로토콜",

            "openDt": "2011-12-15",

            "salesAmt": "2776060500",

            "salesShare": "36.3",

            "salesInten": "-415699000",

            "salesChange": "-13",

            "salesAcc": "40541108500",

            "audiCnt": "353274",

            "audiInten": "-60106",

            "audiChange": "-14.5",

            "audiAcc": "5328435",

            "scrnCnt": "697",

            "showCnt": "3223"

        }, {

            "rnum": "2",

            "rank": "2",

            "rankInten": "1",

            "rankOldAndNew": "OLD",

            "movieCd": "20110295",

            "movieNm": "마이 웨이",

            "openDt": "2011-12-21",

            "salesAmt": "1189058500",

            "salesShare": "15.6",

            "salesInten": "-105894500",

            "salesChange": "-8.2",

            "salesAcc": "13002897500",

            "audiCnt": "153501",

            "audiInten": "-16465",

            "audiChange": "-9.7",

            "audiAcc": "1739543",

            "scrnCnt": "588",

            "showCnt": "2321"

        }]

    }

}

데이터 저장 방식

Map =  "Key" : "Value"

List = Data, Data, Data ....

 

 

우선 크게 보면 아래와 같은 형식입니다. (색상 강조 설명)

JSONOBject의 값은 "boxOfficeResult": {     여기선 알아서 JSONObject로 받아와서 어디에 담을 필요가 없죠. 다음!

{
    "boxOfficeResult": { 
        "boxofficeType": "일별 박스오피스",
        "showRange": "20120101~20120101",
        "dailyBoxOfficeList": [{
            "rnum": "1",
            "rank": "1",
            "rankInten": "0",
            "rankOldAndNew": "OLD",
            "movieCd": "20112207",
            "movieNm": "미션임파서블:고스트프로토콜",
            "openDt": "2011-12-15",
            "salesAmt": "2776060500",
            "salesShare": "36.3",
            "salesInten": "-415699000",
            "salesChange": "-13",
            "salesAcc": "40541108500",
            "audiCnt": "353274",
            "audiInten": "-60106",
            "audiChange": "-14.5",
            "audiAcc": "5328435",
            "scrnCnt": "697",
            "showCnt": "3223"
        }, {
            "rnum": "2",
            "rank": "2",
            "rankInten": "1",
            "rankOldAndNew": "OLD",
            "movieCd": "20110295",
            "movieNm": "마이 웨이",
            "openDt": "2011-12-21",
            "salesAmt": "1189058500",
            "salesShare": "15.6",
            "salesInten": "-105894500",
            "salesChange": "-8.2",
            "salesAcc": "13002897500",
            "audiCnt": "153501",
            "audiInten": "-16465",
            "audiChange": "-9.7",
            "audiAcc": "1739543",
            "scrnCnt": "588",
            "showCnt": "2321"
        }]
   
}

 

 {  }  안에 들어가 있는 데이터 모습이 : 콜론으로 구분되어 있습니다. 그러면 Map이죠.

"boxofficeType"  : "일별 박스오피스",

"showRange"   : "20120101~20120101",

 "dailyBoxOfficeList"  : [{},{}]

{
    "boxOfficeResult": 
        "boxofficeType": "일별 박스오피스",
        "showRange": "20120101~20120101",
        "dailyBoxOfficeList": [{
            "rnum": "1",
            "rank": "1",
            "rankInten": "0",
            "rankOldAndNew": "OLD",
            "movieCd": "20112207",
            "movieNm": "미션임파서블:고스트프로토콜",
            "openDt": "2011-12-15",
            "salesAmt": "2776060500",
            "salesShare": "36.3",
            "salesInten": "-415699000",
            "salesChange": "-13",
            "salesAcc": "40541108500",
            "audiCnt": "353274",
            "audiInten": "-60106",
            "audiChange": "-14.5",
            "audiAcc": "5328435",
            "scrnCnt": "697",
            "showCnt": "3223"
        }, {
            "rnum": "2",
            "rank": "2",
            "rankInten": "1",
            "rankOldAndNew": "OLD",
            "movieCd": "20110295",
            "movieNm": "마이 웨이",
            "openDt": "2011-12-21",
            "salesAmt": "1189058500",
            "salesShare": "15.6",
            "salesInten": "-105894500",
            "salesChange": "-8.2",
            "salesAcc": "13002897500",
            "audiCnt": "153501",
            "audiInten": "-16465",
            "audiChange": "-9.7",
            "audiAcc": "1739543",
            "scrnCnt": "588",
            "showCnt": "2321"
        }]
   
}
1
Map<String,Object> boxOfficeResult= gson.fromJson( jsonObject.get("boxOfficeResult").toString(),new TypeToken<Map<String, Object>>(){}.getType());

위 줄처럼 받는다면 Map에 담긴 데이터는 아래와 같이 저장됩니다.

boxOfficeResult

Key Value
"boxofficeType" "일별 박스오피스"
"showRange" "20120101~20120101"
"dailyBoxOfficeList"  [ { key : Value }, { key : Value } ] 

이제 dailyBoxOfficeList에 있는 Value 모습을 보면 key : Value }, key : Value  }  ]되어 있습니다.

이것을 나눠서 보면 {Data}, {Data}  ]        <=List      

그 안에 다시 보면 key : Value  }, {  key : Value  }   <=Map

 

그런데 저것을 한 번에 가져올거기 때문에

ArrayList<>안에 다시 Map<key Type, Value Type>을 넣습니다.

ArrayList< Map<String,Object>    >

 

천천히 보시면 이해가 가실 것 같습니다.

만약 그냥 좀 빠르게 사용하고 싶다 하시면

{} 중괄호는 Map

[] 대괄호는 List 

라고 생각하시면 됩니다. ㅎㅎ

{
    "boxOfficeResult": {
        "boxofficeType": "일별 박스오피스",
        "showRange": "20120101~20120101",
        "dailyBoxOfficeList": [{
            "rnum": "1",
            "rank": "1",
            "rankInten": "0",
            "rankOldAndNew": "OLD",
            "movieCd": "20112207",
            "movieNm": "미션임파서블:고스트프로토콜",
            "openDt": "2011-12-15",
            "salesAmt": "2776060500",
            "salesShare": "36.3",
            "salesInten": "-415699000",
            "salesChange": "-13",
            "salesAcc": "40541108500",
            "audiCnt": "353274",
            "audiInten": "-60106",
            "audiChange": "-14.5",
            "audiAcc": "5328435",
            "scrnCnt": "697",
            "showCnt": "3223"
        }, {
            "rnum": "2",
            "rank": "2",
            "rankInten": "1",
            "rankOldAndNew": "OLD",
            "movieCd": "20110295",
            "movieNm": "마이 웨이",
            "openDt": "2011-12-21",
            "salesAmt": "1189058500",
            "salesShare": "15.6",
            "salesInten": "-105894500",
            "salesChange": "-8.2",
            "salesAcc": "13002897500",
            "audiCnt": "153501",
            "audiInten": "-16465",
            "audiChange": "-9.7",
            "audiAcc": "1739543",
            "scrnCnt": "588",
            "showCnt": "2321"
        }]
    }
}
1
 ArrayList<Map<String, Object>> jsonList = (ArrayList) boxOfficeResult.get("dailyBoxOfficeList");

위와 같이 받으시면 "dailyBoxOfficeList"의 데이터를 사용하실 수 있습니다. 

            //dailyBoxOfficeList에 있는 값을 자유롭게 사용 가능하다.

            // (0) 첫번째 영화 정보

            movieName1=jsonList.get(0).get("movieNm").toString(); // 미션임파서블:고스트프로토콜

            rank1=jsonList.get(0).get("rank").toString(); // 1

            // (1) 첫번째 영화 정보

            movieName2=jsonList.get(1).get("movieNm").toString(); // 마이 웨이

            rank2=jsonList.get(1).get("rank").toString(); // 2

 

 

 

기초 Gson 사용 예제에서 위와 같은 작업을 했습니다.  참고하세요.

2020/03/19 - [안드로이드/개발자 일상] - 안드로이드 Gson 라이브러리 (JSON 파일을 만들어서 Gson 이용)

 

안드로이드 Gson 라이브러리 (JSON 파일을 만들어서 Gson 이용)

아래 링크 Gson 라이브러리 주소입니다. https://github.com/google/gson google/gson A Java serialization/deserialization library to convert Java Objects into JSON and back - google/gson github.com 간략..

lcw126.tistory.com

 

댓글