본문 바로가기
개발(Development)/Android(안드로이드)

[안드로이드 Kotlin] JSON 파일 저장 및 파싱 방법: JSONArray, JSONObject

by 카레유 2021. 7. 21.

안드로이드 개발시,

DB를 쓰자니 좀 작고, Preference 를 쓰자니 좀 큰 데이터들이 있다.

이럴 때 JSON이나 XML파일 등으로 안드로이드 앱 내부에 저장해두고 사용할 때가 있다.

 

이번 글에서는 JSON 파일을 안드로이드 앱 내부에 저장해두고, 불러와서 파싱하는 방법을 정리한다.


# JSON 파일 저장 방법

1. assets 디렉토리 생성

- app > src > main 경로에 assets 폴더(디렉터리)를 만든다.

- 안드로이드 스튜디오 환경에서는 project 보기 모드로 전환해서 디렉토리를 생성하면 더 쉽다.

 

 

2. json 파일 저장

- assets 경로에 .json 파일을 저장한다. (복사 붙여넣기를 해도 되고, 직접 생성해도 된다)

 


# JSON 파일 로드 및 파싱 방법

1. assets 폴더에서 json 파일 로딩하기

- 아래의 코드는 assets폴더에 있는 json파일을 열고, 내부 텍스트를 읽어 String으로 반환하다.

 

val jsonString = assets.open("파일명.json").reader().readText();

 

 

2. JSONArray로 파싱하기

- 매개변수로 String을 넣어 JSONArray객체를 생성하면 배열처럼 사용할 수 있다.

 

val jsonArray = JSONArrary(jsonString)

 

 

3. JSONObject 취득하기

- JSONArrary객체에서 getJSONObject(인덱스: Int) 메서드를 호출하면 인덱스에 해당하는 JSONObject를 취득할 수 있다.

 

val jsonObject = jsonArray.getJSONObject(인덱스숫자)

 

 

4. key에 해당하는 value 획득하기

- JSONObject객체에서 getString(name: String), getInt(name: String) 메서드 등으로 name에 해당하는 value를 확인할 수 있다.

 

val value = jsonObject.getString("키값")

 


# 코드 전문

- data.json 파일 (assets폴더에 저장된 JSON 데이터 파일)

 

[{"id":"1","language":"코틀린"}, {"id":"2","language":"자바"}, {"id":"3","language":"스위프트"}]

 

 

 

- MainActiviy.kt 파일 (액티비티 코드)

 

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 1. JSON 파일 열어서 String으로 취득
        val jsonString = assets.open("data.json").reader().readText()
        Log.d("jsonString", jsonString)


        // 2. JSONArray 로 파싱
        val jsonArray = JSONArray(jsonString)
        Log.d("jsonArray", jsonArray.toString())


        // 3. JSONArray 순회: 인덱스별 JsonObject 취득후, key에 해당하는 value 확인
        for (index in 0 until jsonArray.length()){
            val jsonObject = jsonArray.getJSONObject(index)
            
            val id = jsonObject.getString("id")
            val language = jsonObject.getString("language")

            Log.d("jsonObject", jsonObject.toString())
            Log.d("json_id_language", "$id $language")
        }
    }
}

 

 

- 실행 결과:  각각 순서대로 Log에 찍어보았다.

안드로이드 JSON파일 파싱 결과

 

 

 

댓글