본문 바로가기
Study/Android

JSON Array parsing

by Answer Choi 2015. 11. 24.
반응형

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부분이 묶여있어 한번에 캡쳐 했습니다.

반응형

인기글