Gooday Note Scrap Source Android login
 
작성일 : 12-06-12 10:20
안드로이드에서 JSON 처리하기
 글쓴이 : 기리
조회 : 13,034   추천 : 0   비추천 : 0  
   안드로이드에서 JSON 처리하기.pdf (274.7K) [0] DATE : 2012-06-12 10:20:08
   http://journae.springnote.com/pages/5891641?print=1 [1411]
안녕하세요~ 매번 눈팅만하고 필요한 자료만 찾는 도중에

JSON 에 관련된 글이 없어서 간단하게나마 올려봅니다~.

이미 알고 계신분들도 많겠지만 저처럼 완전 초보는 이글을 읽고 조금이나마 도움이 됐으면 하는 바람입니다..

우선 json에 대한 기초도 없었던 저는 이번 프로젝트로 인해서 고생좀 했습니다 ㅜㅜ

간 단하게 json 에대해 설명하자면 xml 의 무거움을 또 가독성(?)을 개선하고자 txt 파일로 만들어져있고

key 값과 value 값으로 구분이 됩니다...(제가 어렴풋이 이해한 개념이니.. 안맞더라도 양해를..)

예를 들어 home.json 이란 파일이 존재하고 이 내용을 보게 되면

{
     "title":"TEST",
     "title_img":"title.png",
      "buttons":[
           {
                 "id":"home01",
                 "title":"테스트버튼",
                 "icon_img":"test_btn.png",
                 "text_img":"text_img.png"
           },
           {
                 "id":"home02",
                 "title":"테스트버튼2",
                 "icon_img":"test_btn2.png",
                 "text_img":"text_img2.png"
           }
       ]
}

각 줄의 첫번째 "" 안의 값은 key 값이 되며, 두번째 값은 value가 됩니다.

"buttons"의 경우 [ ] 로 묶여있는데 이것이 배열을 의마하게 됩니다.

위의 경우 {} 두번 반복되는 것은 배열buttons[ ]의 0번째 1번째가 되는거겠지요 ^^;;

배열안의 값도 key값과 value 값으로 구분되어 집니다...

간단? 하게나마 json파일 형식에 대해 말씀드린거구요(다시 말씀드리지만 저처럼 완전 초보님들에게만....)

자 이제 위와 같은 json 파일을 안드로이드 프로젝트에서 사용하고자 합니다.

안드로이드 api 에서 제공하는 json 의 사용은 한계점이 있습니다. json의 사용법은 관련 자료를 찾아보세요.
(지금 제가 하는 프로젝트는 위와 같이 json 파일로 받아서 각 화면의 이미지, 타이틀, list, url 등의 정보를 받아서 처리하도록 되어있습니다.)

처음에 별별자료를 다 읽어봤지만 안드로이드에서 사용하는 예제가 영문으로 되어있어서 대략난감했습니다...
한글로 된 블로그도 있었지만 제수준에서는 이해하기가;;;

우선 프로젝트의 assets 폴더 안에 json폴더를 생성해주었고 그안에 위와 같은 home.json 파일을 만들어주었습니다.

Home.java 라는 클래스를 생성해주고 json 파일을 읽어 오는 방법은

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        //asset 폴더의 내용을 가져오기 
        AssetManager assetManager = getResources().getAssets();
        
      try{
        //사용하고자 하는 json 파일 open
        AssetInputStream ais = (AssetInputStream)assetManager.open("json/home.json");
 
        //stream을 리더로 읽기
        BufferedReader br = new BufferedReader(new InputStream(ais));

        //StringBuilder 사용
        StringBuilder sb = new StringBuilder();

        //json파일의 내용이 용량이 클경우 Stirng 의 허용점인 4096 byte 를 넘어가면 오류발생
        int bufferSize = 1024 * 1024;
        
        //char 로 버프 싸이즈 만큼 담기위해 선언
        char readBuf [] = new char[bufferSize];
        int resultSize = 0;
        
        //파일의 전체 내용 읽어오기
        while((resultSize = br.read(readBuf))  != -1){
                if(resultSize == bufferSize){
                       sb.append(readBuf);
                }else{
                       for(int i = 0; i < resultSize; i++){
                            //StringBuilder 에 append
                            sb.append(readBuf[i]);
                       }
                }
        } 
        // 수정 - 새로운 문자열을 만들어서 내부 버퍼의 내용을 복사하고 반환한다.
        String jString = sb.toString();

        //JSONObject 얻어 오기
        JSONObject  jsonObject =  new JSONObject(jString);

        //json value 값 얻기
        Stirng title = jsonObject.getString("title").toStirng();   //결과값 TEST
       
         //이미지 사용법에 대해서는 이미 아시리라 믿고 패스 할께요;;

       //JSONArray 사용법
        JSONArray jArr = new JSONArray(jsonObject.getStirng("buttos"));
        
       //StringArray에 buttons 의 title 키의 value값을 담겠습니다.  

        String btnTitle [] = new Stirng[jArr.length()];
     
         for(int i = 0; i < jArr.length(); i++){
                btnTitle [i] = jArr.getJSONObject(i).getString("title").toString();
                // 출력하여 결과 얻기
                system.out.println("btnTitle[" + i + "]=" + btnTitle[i]);
         }

       }catch(JSONException je){
           Log.E("jsonErr", "json에러입니당~", je);
       }catch(Exception e){
           Log.E("execption", "파일이 없나봐용", e);
       }
    }

휴 일일이 쓰려니 힘드네요;; 위와 같이 코딩을 하여 json파일에 들어있는 값들을 적용할수가 있습니다.

이방법 알아내느라 아주 쬐금 고생을 했드랬죠 -_-;; 머라가 나빠서 이해력 속도가 느린;;;

이 미지 사용법에 관해서는 여기 훌륭하신 분들의 강좌를 보고 좀 변형해서 했기에;;

제방법으로 하다가 머리가 아프실지 몰라 감히 올리지는 못하였네요 ㅎㅎㅎ

이상으로 json 파일 사용에 대한 간단한 글을 마치도록 할께요...

허 접한 글이지만 저처럼 헤매시는 분들에게 조금이나마 도움이 되었으면 좋겠네요~~^^;;

기리 12-06-12 10:21