JSON은 속성(key)와 값(value)이 쌍으로 이루어진 데이터 포맷입니다.
예를 들면
1 | {"Manufacturer":"LG","Device_Type":"Aircon","Device_Name":"FNQ167VBHW","MACAddress":"4439c47ed870"} | cs |
위와 같은 형태로 되어있습니다.
값을 읽을때에 JSon Object로 넣어
1 | JsonObject.getString("Manufacturer"); | cs |
라고 하면 "LG"라는 값을 읽어오게 됩니다.
풀파서(pull parser)에 비해 사용법도 간단하고 읽기도 쉬운 장점이 있습니다.
1 2 3 4 5 6 7 | String result={"Manufacturer":"LG","Device_Type":"Aircon","Device_Name":"FNQ167VBHW","MACAddress":"4439c47ed870"}; JSONObject jsonObject=JSONObject(result); getManufacturer=jsonObject.get("Manufacturer"); getType=jsonObject.get("Device_Type"); getName=jsonObject.get("Device_Name"); getMACAddress=jsonObject.get("MACAddress"); Log.e("JsonParsing",getManufacturer+","+getType+","+getName+","+getMACAddress); | cs |
예를 들어 위의 result라는 String값이 있습니다.
형태가 JSON형태입니다.
Line 2 : Json을 파싱하기 위해 Json object에 넣어줍니다.
Line 3~6 : 각각의 값을 Json object에서 파싱합니다.
Line 7 : 파싱값을 보여줍니다.
하지만 위와 같이 속성당 하나의 값만 있지 않은 경우도 있습니다.
이런 경우 JSON ARRAY를 사용하여야 합니다.
1 2 3 | [{"MACAddress":"4439c47ed870","Device_Type":"Aircon","Manufacturer":"LG","Device_Name":"FNQ167VBHW"}, {"MACAddress":"4439c4eea695","Device_Type":"Heater","Manufacturer":"SHINIL","Device_Name":"HTF-500RRF"}, {"MACAddress":"4439c4eea675","Device_Type":"Cooler","Manufacturer":"SHINIL","Device_Name":"SIF-CF2020"}] | cs |
속성당 3개의 값이 배열 형태로 들어가 있습니다.
자세히 보시면 JSON ARRAY는 '[ ]'(대 괄호)로 묶여있습니다.
2차원 배열의 형태를 띄고 있습니다.
JSON ARRAY는 바로 파싱하기가 어렵습니다.(같은 속성의 이름값이 여러개이기 때문이죠)
따라서 JSON ARRAY를 JSON Object로 변환한 후에 파싱을 해줘야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | String result="[{"MACAddress":"4439c47ed870","Device_Type":"Aircon","Manufacturer":"LG","Device_Name":"FNQ167VBHW"}, {"MACAddress":"4439c4eea695","Device_Type":"Heater","Manufacturer":"SHINIL","Device_Name":"HTF-500RRF"}, {"MACAddress":"4439c4eea675","Device_Type":"Cooler","Manufacturer":"SHINIL","Device_Name":"SIF-CF2020"}]"; Log.e("result",result); JSONArray jArray=new JSONArray(result); list_cnt=jArray.length(); Log.e("array_count",list_cnt+""); getManufacturer=new String[list_cnt]; getType=new String[list_cnt]; getName=new String[list_cnt]; getMACAddress=new String[list_cnt]; for(int i=0;i<list_cnt;i++){ JSONObject jsonObject=jArray.getJSONObject(i); Log.e("JSON Object",jsonObject+""); getManufacturer[i]=jsonObject.getString("Manufacturer"); getType[i]=jsonObject.getString("Device_Type"); getName[i]=jsonObject.getString("Device_Name"); getMACAddress[i]=jsonObject.getString("MACAddress"); Log.e("JsonParsing",getManufacturer[i]+","+getType[i]+","+getName[i]+","+getMACAddress[i]); } | cs |
곳곳에 디버그 메세지를 넣었습니다.
Line 1~4 : Json Array형태의 String입니다.
Line 6 : string을 Json Array로 만듭니다.
Line 7~8 : array 개수를 보여줍니다.
Line 10~13 : 개수에 맞게 String 배열을 선언합니다.
Line 17~18 : Json Array를 Json Object로 한 배열씩 읽습니다.
Line 19~22 : Json Object에서 각 속성의 값을 가져옵니다.
Line 23 : 파싱한 Json 을 보여줍니다.
for문으로 Json object와 parsing부분이 묶여있어 한번에 캡쳐 했습니다.
'Study > Android' 카테고리의 다른 글
socket통신 outputstream 할때 이상한 문자출력 (0) | 2015.12.21 |
---|---|
한글URL으로 XML parsing시 한글 깨질때 (0) | 2015.12.10 |
android에서 mysql 데이터 가져오기 (92) | 2015.11.18 |
custom Notification (커스텀 알림창) (0) | 2015.11.18 |
Google map Location (구글맵 위치) - LocationListener using google api (4) | 2015.10.26 |