안드로이드 개발시,
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에 찍어보았다.
'개발(Development) > Android(안드로이드)' 카테고리의 다른 글
[안드로이드] Admob 앱 추가 등록 및 설정 방법 (앱ID 생성) (0) | 2021.07.24 |
---|---|
[안드로이드 kotlin] Admob 앱 배너 광고 넣는 방법( + 테스트광고) (0) | 2021.07.23 |
[안드로이드 kotlin] Fragment에서 Context 사용 방법: findViewById, runOnUiThread, Toast 등 (0) | 2021.07.21 |
[안드로이드 Kotlin] Fragment 에서 뷰바인딩(View Binding) 사용 방법 (0) | 2021.07.20 |
[안드로이드] RadioGroup의 RadioButton 가운데/비율 정렬 배치 방법 (0) | 2021.07.20 |
댓글