Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- unreal_contentmanagement
- unrealbuildcommand
- molocon24후기
- owasp_dependency_check
- jenkins_계정삭제
- dxt
- cookcontent
- etc2
- jenkins_owasp
- xcode_targeting
- unrealbuildshellscript
- molocon24
- sourcetree_accessdenied
- xcode-select_jeknins
- unreal_android_빌드옵션
- unity package_androidlib
- ChatGPT
- jenkins_role관리_플러그인
- jenkins_sudo
- python3.12.4
- appcenter대체
- asset database_androidlib
- unreal_binaryselection
- unreal_flavorselection
- owasp_depdendency_check_shell
- apkipa업로드저장소
- sourcetree_authencicationfailed
- molocon24내용정리
- python_distutils_module_missing
- Unity2022
Archives
- Today
- Total
mystic-agit 개발 블로그
[Android][Kotlin] JSONObject optString 결과가 "null" 로 반환되는 경우 null로 반환하기 위한 방법 확인 본문
Kotlin
[Android][Kotlin] JSONObject optString 결과가 "null" 로 반환되는 경우 null로 반환하기 위한 방법 확인
mystic-agit 2024. 4. 23. 18:27목 차
- Android Kotlin 에서 JSONObject optString 사용 시 null 데이터를 "null"로 반환하는 현상 확인
- null 데이터를 반환하기 위한 몇 가지 시도
- 결론
1. Android Kotlin 에서 JSONObject optString 사용 시 null 데이터를 "null"로 반환하는 현상 확인
(1) 서버에서 postbody 데이터도 전달받은 데이터 예
{"abc":null, "def":"good"} // response String
(2) postbody 데이터를 JSONObject로 get하고 이를 optString 해보니
var postBodyJson = JSONObject(response)
var abc: String? = null
abc = postBodyJson.optString("abc")
if(abc == "null") {
return true
} else {
return false
}
해당 코드의 결과는 true 였다. optString 메서드의 fallback 파라메터를 지정하지 않으면 당연히 "" (빈 String) 일 것으로 예상하였으나 결과는 달랐다.
null을 반환받기 위해 몇 가지 테스트르 하였다.
2. null 데이터를 반환하기 위한 몇 가지 시도
var temp1: String? = null
temp1 = postBodyJson.optString("abc", null)
var temp2: String? = null
try {
temp2 = postBodyJson.getString("abc")
} catch (e: Exception) {
}
temp1, temp2의 결과 모두 "null" 이였다.
해당 방법으로 null을 받아볼 순 없다.
3. 결론
이런 부분은 Java나 Kotlin 에서 사용하는 JSONObject 클래스의 버그라기보단 JSON의 규격 특성이라 한다. 많은 사람들이 null 반환을 위해 optString을 오버라이딩하여 별도의 메서드를 구현해서 쓰는 것으로 보인다.
iOS에서는 JSON을 사용하지 않고 Dictionary로 유사 데이터를 파싱하고 있어서 동일한 현상이 발생하지 않았다.
null을 반환받기 위한 몇 가지 결과 코드를 확인하였다.
var temp3: String? = null
try {
temp3 = postBodyJson.get("abc")
} catch (e: Exception) {
}
fun JSONObject.optStringNull(key: String): String? {
return if (this.isNull(key)) {
null
} else {
this.optString(key)
}
}
var temp4: String? = null
temp4 = postBodyJson.optStringNull("abc")
temp3, temp4의 코드는 모두 null을 반환하였다.
단, temp3 경우 타입을 확정하지 않고 사용할 경우 프로토콜을 명확히 아는 담당자가 아니고선
함께 개발하는 경우 코드만 가지고 그 데이터를 확정할 수 없는 코드라
temp4 처럼 별도의 오버라이딩한 메서드를 활용하는 것이 효과적일 것으로 보인다.
'Kotlin' 카테고리의 다른 글
ConcurrentHashMap 을 통한 ConcurrentModificationException 해소 (0) | 2023.03.14 |
---|
Comments