Android : JSON 파일 파싱하기

Beautify.log·2022년 2월 10일
0

Android with Kotlin

목록 보기
15/17
post-thumbnail

개요


JSON이란?

JSON은 JavaScript Object Notation의 약자로 자바스크립트의 객체 문법을 사용해 데이터를 전달하거나 받기 위해 사용하는 것입니다.

"키 - 값"의 구조로 되어 있으며 RESTful API로 데이터를 전송하는데 큰 역할을 합니다.


JSON 파일 Parsing


JSON 파일 준비

main 디렉터리 하위에 assets 디렉터리를 만들어줍니다.

[
  {
    "id": "kotlin",
    "language": "코틀린"
  },
  {
    "id": "java",
    "language": "자바"
  },
  {
    "id": "swift",
    "language": "스위프트"
  }
]

JSON 파일 읽어오기

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.TextView
import org.json.JSONArray

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // JSON 파일에 접근해서 문자열을 가져와보자!
        val jsonString = assets.open("data.json").reader().readText()
        Log.d("JSON STR", jsonString)

우선은 문자열을 가져오는 방법입니다.
assets 디렉터리로 접근해서 open을 사용하여 파일을 열어줍니다. 이것을 reader로 읽어주는데 이 때 텍스트형식으로 읽어오라는 것입니다.

        // JSON 파일에 접근해서 배열 형식으로 가져와보자!
        val jsonArray = JSONArray(jsonString)
        Log.d("json str", jsonArray.toString())

JSONArray를 사용하면 배열 형식으로 가져올 수도 있습니다.

        // JSON 파일에 접근해서 key값으로 value를 뽑아보자!
        
        val textView = findViewById<TextView>(R.id.textView)
        
        for (i in 0 until jsonArray.length()) {
            val jsonObject = jsonArray.getJSONObject(i)

            textView.append("\n--------------------------\n")     // 경계선

            val id = jsonObject.getString("id")
            val language = jsonObject.getString("language")

            textView.append(
                """
                    $id
                """.trimIndent()
            )

            textView.append(
                """
                    $language
                """.trimIndent()
            )


        }
    }
}

마지막으로 key 값을 가지로 value를 얻어서 텍스트뷰에 뿌려주겠습니다.

위에서 만든 배열을 돌며 값을 꺼내와보겠습니다.

jsonArray 즉 배열로 만들어진 것을 가지고 getJSONObject()를 사용해주었습니다.

getJSONObject()를 사용하면 index에 대한 value 값을 리턴해줍니다.

이 때 indexkey라고 생각하면 이해하는데 도움이 될 것 같습니다.

이는 객체상태이므로 문자열을 얻어와서 텍스트뷰에 뿌리기 위해서는 getString 메서드가 필요합니다.

profile
tried ? drinkCoffee : keepGoing;

0개의 댓글