참조
안드로이드 developer - JSONObject
위키피디아 - JSON
깡쌤의 안드로이드 프로그래밍
틀린 부분 댓글로 남겨주시면 수정하겠습니다..!!
JSON은 "속성-값 쌍" 또는 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷입니다. 비동기 브라우저/서버 통신(AJAX)를 위해, 넓게는 XML(AJAX가 사용)을 대체하는 주요 데이터 포맷입니다. 안드로이드에서 JSON 파싱은 JSONObject 클래스와 JSONArray 클래스를 이용합니다.
{
"이름": "홍길동",
"나이": 25,
"성별": "여",
"주소": "서울특별시 양천구 목동",
"특기": ["농구", "도술"],
"가족관계": {"#": 2, "아버지": "홍판서", "어머니": "춘섬"},
"회사": "경기 수원시 팔달구 우만동"
}
JSON은 앞서 말했듯이 "속성-값" 또는 "키-값"으로 이루어졌습니다. 위의 예제는 한 사람의 정보에 관한 JSON 객체인데 키-값 쌍의 패턴으로 표현되어 있습니다.
(이름 - 홍길동, 나이 - 25 등...)
안드로이드에서 JSONObject는 JSON의 { }로 묶이는 부분의 내용을 나타내기 위한 클래스이며, JSONArray JSON의 [ ]로 묶이는 부분의 내용을 표현하기 위한 클래스입니다. [ ]의 표현식은 그 안에 { }을 여러 개 포함할 수 있는 형태로 { } 하나가 JSONObject 객체로 표현되고, 이 JSONObject 객체 여러 개를 담기 위한 객체가 JSONArray입니다.
위의 예시에서는 { }로 이루어진 B는 JSONObject에 해당하는 것이고, [ ]로 이루어진 A는 JSONArray에 해당합니다.
{
"weather": [
{
"id": 721,
"main": "Haze",
"description": "haze",
"icon": "50n"
}
],
"main": {
"temp": 10.14,
"pressure": 1020,
"humidity": 37,
"temp_min": 6,
"temp_max": 13
},
"id": 1835848,
"name": "Seoul",
"cod": 200
}
try {
// assets 폴더안에 있는 JSON 파일을 열어 InputStream 객체 생성
val inputStream = assets.open("test.json")
// 한번에 읽을 수 있는 사이즈
val size = inputStream.available()
// Byte 배열 생성
val buffer = ByteArray(size)
// InputStream으로 부터 들어온 데이터 읽고 buffer에 저장
inputStream.read(buffer)
// InputStream close
inputStream.close()
// String으로 변환
val json = String(buffer, charset("UTF-8"))
// JSONObject 객체 생성(최상위 JSON 객체)
val jsonRoot = JSONObject(json)
// JSONArray 획득
val jsonArray = jsonRoot.getJSONArray("weather")
// jsonRoot 객체 하위에 데이터 획득
cityView.text = jsonRoot.getString("name")
// jsonRoot 객체 하위에 JSONObject 획득
val jsonMain = jsonRoot.getJSONObject("main")
// jsonMain 객체 하위에 데이터 획득
temperatureView.text = jsonMain.getString("temp")
} catch(e: Exception) {
e.printStackTrace()
}
위의 코드는 다음과 같습니다.
이외에도 여러 getter 함수가 존재합니다.