이전 블로그에서 가져온 글입니다. (2020.4.21)
Json파싱은 잊을만 하면 꼭 다시하게 되더라... 물론 실제로 잊고 산다.
그런 차원에서 정리하는 글
1. Json 데이터 생성
일단 json파일이 필요하니 아래 사이트에서 예제 json을 하나 만들고 시작하자
https://www.json-generator.com/
JSON Generator – Tool for generating random data
Generate any random data you want with power of agile templates and save it to our servers for later use.
json-generator.com
2. Json 데이터 파싱
Json 파일을 읽어들이지 않고 그냥 변수에서 사용할거니 """ """ (TRIPLE DOUBLE QUOTE)으로 저장
val jsonString = """
{
"person": [
{
"id": 0,
"name": "Mathews Parker",
"email": "mathewsparker@franscene.com"
},
{
"id": 1,
"name": "Dickson Clements",
"email": "dicksonclements@franscene.com"
},
{
"id": 2,
"name": "Pat Blair",
"email": "patblair@franscene.com"
},
{
"id": 3,
"name": "Estela Mckinney",
"email": "estelamckinney@franscene.com"
},
{
"id": 4,
"name": "Rivera Mcclain",
"email": "riveramcclain@franscene.com"
}
]
}
""".trimIndent()
.trimIndent() 요녀석은 스트링 안에 불필요한 띄어쓰기 + 맨첫줄과 끝줄이 빈값이면 지워주는 훌륭한 녀석
위의 jsonString이라는 변수에서 내가 뽑고자 하는 데이터는 person이라는 태그 안에 있는 각각의 id, name 그리고 email값이다.
해당 값들을 가져오기 위해서는 아래처럼 코드를 작성해주면 된다.
val jsonObject = JSONObject(jsonString)
val jsonArray = jsonObject.getJSONArray("person")
JsonObject 랑 JSONArray는 한번쯤 파싱해봤다면 봤을 수도 있을만한 녀석이다.
JsonObject
- 중괄호 {} 로 시작하는 애들로 key/value 의 형태를 가진다
- 값들의 순서는 상관이 없다.
JSONArray
- 대괄호 [] 로 시작하는 애들로 JsonObject를 가지고 있는 경우가 많다
- 값들의 순서는 매우 중대사항이다
// JSONObject
{id : 1, name : "A"} == {name : "A", id : 1}
// JSONArray
[1 , "A"] != ["A" , 1]
위의 코드에서 변수 jsonObject는 jsonString에 저장되어 있는 값에서 {}로 시작되는 값을 읽어들이고,
jsonArray는 그 안에서 person으로 시작되는 값을 읽어들인다.
이 다음부터는 단순히 변수들에 각각 접근해주면 된다.
for (i in 0..jsonArray.length() - 1) {
val iObject = jsonArray.getJSONObject(i)
val id = iObject.getInt("id")
val name = iObject.getString("name")
val email = iObject.getString("email")
println("================== ${i + 1} 번째==================")
println("${i + 1}번 id : $id")
println("${i + 1}번 name : $name")
println("${i + 1}번 email : $email")
}
총 5번의 루프를 돌면서 i 번째의 object를 돌면서 각각의 값들을 저장한 후 변수에다가 저장해주고 출력해주면 끝!
fun test() {
val jsonString = """
{
"person": [
{
"id": 0,
"name": "Mathews Parker",
"email": "mathewsparker@franscene.com"
},
{
"id": 1,
"name": "Dickson Clements",
"email": "dicksonclements@franscene.com"
},
{
"id": 2,
"name": "Pat Blair",
"email": "patblair@franscene.com"
},
{
"id": 3,
"name": "Estela Mckinney",
"email": "estelamckinney@franscene.com"
},
{
"id": 4,
"name": "Rivera Mcclain",
"email": "riveramcclain@franscene.com"
}
]
}
""".trimIndent()
val jsonObject = JSONObject(jsonString)
val jsonArray = jsonObject.getJSONArray("person")
for (i in 0..jsonArray.length() - 1) {
val iObject = jsonArray.getJSONObject(i)
val id = iObject.getInt("id")
val name = iObject.getString("name")
val email = iObject.getString("email")
println("================== ${i + 1} 번째==================")
println("${i + 1}번 id : $id")
println("${i + 1}번 name : $name")
println("${i + 1}번 email : $email")
}
}
'[Kotlin]' 카테고리의 다른 글
[Kotlin] 공공API 가져오기 (0) | 2022.05.08 |
---|