JSON은 JavaScript Object Notation의 약자로 자바스크립트의 객체 문법을 사용해 데이터를 전달하거나 받기 위해 사용하는 것입니다.
"키 - 값"의 구조로 되어 있으며 RESTful API로 데이터를 전송하는데 큰 역할을 합니다.
main
디렉터리 하위에 assets
디렉터리를 만들어줍니다.
[
{
"id": "kotlin",
"language": "코틀린"
},
{
"id": "java",
"language": "자바"
},
{
"id": "swift",
"language": "스위프트"
}
]
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
값을 리턴해줍니다.
이 때 index
를 key
라고 생각하면 이해하는데 도움이 될 것 같습니다.
이는 객체상태이므로 문자열을 얻어와서 텍스트뷰에 뿌리기 위해서는 getString
메서드가 필요합니다.