Json 값을 Gson 을 활용하여서 Data 클래스로 변환하는 방법
Converting from Data Class to JSON String
var gson = Gson()
var jsonString = gson.toJson(TestModel(1,"Test"))
Assert.assertEquals(jsonString, """{"id":1,"description":"Test"}""")
Converting from JSON String to a Data Class
var jsonString = """{"id":1,"description":"Test"}""";
var testModel = gson.fromJson(jsonString, TestModel::class.java)
Assert.assertEquals(testModel.id, 1)
Assert.assertEquals(testModel.description, "Test")
참고 : https://www.baeldung.com/kotlin/json-convert-data-class
일반적으로 정해진 형태의 오브젝트를 파싱하는 방법은 위와같이 변환하면 된다. 그러나 Object<T> 와 같이 제너릭 형태의 오브젝트를 변환하기 위해서는 TypeToken 을 사용해서 변환해야 합니다.
저와 같은 경우는 Retrofit 에서 받는 데이터를 Result<T> 와 같은 형태로 데이터를 받아서 처리하고 있기에 해당 형태로 UnitTest 를 작성하기 위해서 Result<T> 형태의 Json 데이터를 Result<T> 로 변형해줘야 했습니다.
내려받는 Json 데이터 형태
{
"status": 200,
"data": {
"name": "프로젝트",
"term": {
"start": "2022-01-01",
"end": "2023-01-01"
},
"code": "코드001",
"purpose": "프로젝트 목적",
"location": {
"lat": "...",
"lang": "...",
"address": "...",
"name": "..."
}
}
}
Json -> Result<T>
// Mocking json 데이터
val successResponse = MockResponseFileReader("project/success.json")
val listType = object : TypeToken<Result<Project>>() {}.type
val expectedResult = gson.fromJson<Result<Project>>(
successResponse.content,
listType
)
val data = expectedResult.data
...
반응형
'Dev > Android' 카테고리의 다른 글
Android MVVM 패턴에 대해서 (0) | 2022.09.01 |
---|---|
Jetpack Compose 학습 (0) | 2022.08.16 |
Room DB 마이그레이션 (0) | 2022.07.14 |
Retrofit2 이슈 - com.google.gson.JsonIOException: JSON document was not fully consumed. (0) | 2022.04.25 |
[AndroidStudio] 사용중이던 Github 계정 바꾸기 (0) | 2022.03.30 |