본문 바로가기

소프트웨어/Android/Java/Ndk

Android] JSON 형식




이전에 Wifi AP 프로젝트를 진행하면서는 


위와 같은 ApObject라는 Class를 생성해서 그 List들을 ArrayList<ApObject> 형식으로 들고있었다.

그런데 어디선가 JSON형식으로 Object를 관리하면 편리하다는 소리를 주워들었다.


JSON Object?

wiki http://ko.wikipedia.org/wiki/JSON

JSON은 JavaScript Object Notation의 약자로써 네트워크상에서 자료를 주고받을때 사용하는 규격이라고한다. 

사용해보니깐 위에서 내가 처음에 적용했던 Object Class를 사용한 ArrayList보다 훨~씬 편하다. 왜 이런 전송 규격을 몰랐을까..라는 생각이 들정도니깐! 


구조도 정말 단순하다. 위에서 사용한 ApObject에 임의의 값을 갖는 JSON Object를 예로 들어보면,이렇게 구성된다.


{
    "SSID"   : "MY_AP_NAME",
    "PW"     : "PW012345",
    "BSSID" : "EE:EE:EE:EE:EE:EE",
    "No"      : 432
}

웹 환경에서 사용하는 JSON을 사용해서 얻는 이점은?

내가 주로 개발하는 안드로이드 환경에서는 자바를 사용하기 때문에 JSON Object에 관련된 Class들을 많이 제공해준다. 그래서 로컬 폴터에 데이터를 String 형식으로 저장하고 꺼내써야 하는 프로그램이라면 JSON Parser를 제공해주기 때문에 쉽게 String을 읽고 파싱하여 객체화 시킬 수 있다.


처음에 설명했던대로 ApObject를 기록하고 다시 꺼내오려면..

"MY_AP_NAME!_!PW012345!_!_EE:EE:EE:EE:EE:EE!_!432" 와같이 지정한 파싱 Token을 기준으로 하는 String을 생성해서 쓴다.

그 후 읽을때는 다시 Parser를 만들어서 순서대로 열심히 꺼내서 저장해야한다...Parser 만드는 일도 귀찮고, String에 Data Type이 하나만 추가되도 Parser를 수정해야 하는 번거로움이 생긴다.


하지만 JSON을 이용하면

JSONObject obj = new JSONObject();
obj.put("SSID", ssid);
obj.put("PW", pw);
String jsonString = obj.toString();
FileWriter fw = new FileWriter(경로); //그냥 파일 쓰는 내용
fw.write(jsonString);
이렇게 Data를 Put을 한다. 넣은 후 꺼낼때는..
String line = br.readLine(); //br은 BufferedReader 객체
JSONObject obj = new JSONObject(line);
String SSID = obj.get(SSID);
String PW = obj.get(PW); 
이게 끝! 하.. 정말 간단하다. 사용자는 파싱 명령도 없이 JSON String을 이용해 객체를 생성하면 알아서 객체까지 생성해준다.

와 진짜편하다.


자주 이용해야겠다.