1. ignoreUnknownKeys
ignoreUnknownKeys = true
JSON 데이터를 역직렬화할 때, 데이터 클래스에 정의되지 않은 추가 필드(알 수 없는 키)가 JSON에 포함되어 있을 경우, 이 필드를 무시하고 나머지 필드만 역직렬화
기본값 : false
사용 예시 : 서버에서 제공하는 응답에 예상하지 못한 키가 포함되어 있어도 문제없이 데이터를 파싱하고 싶을 때 사용
@Serializable
data class User(val id: Int, val name: String)
val jsonString = """{"id": 1, "name": "John", "extraField": "unknown"}"""
// ignoreUnknownKeys가 true일 때, "extraField"는 무시되고 정상적으로 역직렬화됨
val user = Json { ignoreUnknownKeys = true }.decodeFromString<User>(jsonString)
2. prettyPrint
prettyPrint = true
데이터를 직렬화할 때 JSON을 보기 좋게 들여쓰기를 포함하여 출력
개발 및 디버깅 시 가독성을 높이는 데 도움됨
기본값 : false
val user = User(id = 1, name = "John")
val jsonString = Json { prettyPrint = true }.encodeToString(user)
// 출력
{
"id": 1,
"name": "John"
}
3. isLenient
isLenient = true
JSON의 문법을 덜 엄격하게 허용하는 옵션
일반적으로 JSON 스펙에 맞지 않는, 더 느슨한 JSON 형식을 허용
예를 들어, 문자열을 작은따옴표(')로 묶거나, 키나 값에 따옴표가 없는 경우, 끝에 쉼표가 있어도 허용됨
기본값 : false
사용 예시 : JSON 데이터가 정확한 표준을 따르지 않을 경우에도 데이터를 파싱하기 위해 사용
val jsonString = """{ id: 1, name: 'John' }""" // 스펙에 맞지 않음
// isLenient가 true이면, 스펙에 맞지 않는 JSON도 파싱 가능
val user = Json { isLenient = true }.decodeFromString<User>(jsonString)
4. encodeDefaults
encodeDefaults = true
데이터 클래스를 직렬화할 때 기본값을 가진 필드도 JSON으로 직렬화할지 결정하는 옵션
기본적으로 설정된 값이 있을 경우, 그 값을 포함할지 여부를 지정
기본값 : true (기본 값을 포함해서 직렬화)
사용 예시 : 기본값을 가진 필드가 JSON에 포함될 필요가 없거나, 직렬화된 데이터 크기를 줄이고 싶을 때 사용
@Serializable
data class User(val id: Int, val name: String = "Unknown")
val user = User(id = 1)
// 기본값을 직렬화하지 않도록 설정 (name은 직렬화되지 않음)
val jsonString = Json { encodeDefaults = false }.encodeToString(user)
// 결과: {"id": 1}
5. explicitNulls
explicitNulls = false
null 값을 명시적으로 직렬화할지 여부를 결정
이 옵션이 false일 경우, null 값은 JSON에서 생략됨
기본값 : true (기본적으로 null을 명시적으로 직렬화)
사용 예시 : 데이터에서 null 값을 명시적으로 직렬화할 필요가 없을 때 사용하여 JSON 크기를 줄일 수 있음
@Serializable
data class User(val id: Int, val nickname: String? = null)
val user = User(id = 1)
// explicitNulls = false일 경우 null 값은 직렬화되지 않음
val jsonString = Json { explicitNulls = false }.encodeToString(user)
// 결과: {"id": 1}
6. coerceInputValues
coerceInputValues = true
예상되는 값과 맞지 않는 값이 입력될 때 자동으로 기본값을 적용하는 옵션
예를 들어, 숫자형 필드에 null이 들어오면 해당 필드에 기본값을 적용
기본값 : false
사용 예시 : 예상치 못한 데이터 형식이나 누락된 데이터가 있을 때 강제로 기본값을 적용하여 데이터 불일치를 처리하고 싶을 때 사용
@Serializable
data class User(val age: Int = 0)
val jsonString = """{"age": null}"""
// coerceInputValues = true이면 null 값을 기본값 0으로 대체
val user = Json { coerceInputValues = true }.decodeFromString<User>(jsonString)
'안드로이드 > 이론' 카테고리의 다른 글
[ 안드로이드 ] APK/AAB 추출 시 파일명 변경하기 + 성능 최적화 (1) | 2024.12.08 |
---|---|
[ 안드로이드 ] LocalBroadcaseManager Deprecated 대응 (0) | 2024.07.12 |
[ 안드로이드 ] 앱 내에 개발자 모드 추가하기 3 (0) | 2024.05.16 |
[ 안드로이드 ] 액티비티 배경 투명하게 설정 (+ 투명 배경 유지 안되는 이슈 해결) (0) | 2024.03.25 |
[ 안드로이드 ] Multi ViewType RecyclerView ViewHolder 순서 고정하기 (0) | 2024.01.14 |