개발이야기/개념
Json 안에 Json 처리
대머리개발자
2024. 4. 25. 16:11
728x90
실상 Map 안에 Map으로 생각해도 된다.
근데 문제는 실제 등록된 데이터를 확인해 보면 지저분하다. 우웩
더 나은 설계 방식은 Json 안에 Json을 저장하는 대신에,
복합 객체에 이값을 저장하고 전체 객체를 Json으로 직렬화하는 것이다.
⭐⭐AS-IS
val mainConfig = mutableMapOf(
"xxx.status" to jsonStatus
)
Mono.zip(
RedisConfig.getCache( "xxx:main:recommend"),
RedisConfig.getCache( "xxx:tags"),
).publishOn(Schedulers.boundedElastic())
.doOnNext { it ->
mainConfig["recommend"] = it.t1
mainConfig["tags"] = it.t2
RedisConfig.addCache(redisKey, Gson().toJson(mainConfig)).subscribe()
}.subscribe()
딱!! 한 번의 API로 호출을 통합 하기 위해 여러개의 데이터를 하나의 Json으로 머지하는 코드다.
문제는 없지만..
Gson()을 사용하면 이식성과 시스템 간 호환성을 보장하기 위해
하위 Json의 형태는 백슬래시(\)가 따옴표(")는 앞에 전부 붙여진다.
위에서 언급한 것처럼 어지럽다.
⭐⭐TO-BE
객체로 "트랜스폼"한다.
즉, klass 속에 klass로 처리한다.
하악하악. 손이 많이 간다.
하지만 Json 인식하고 깔끔하게 response가 정렬된다.
Mono.zip(
RedisConfig.getCache( "xxx:main:recommend"),
RedisConfig.getCache( "xxx:tags"),
).publishOn(Schedulers.boundedElastic())
.doOnNext { it ->
val klass = klassData(
mainStatus = status
, recommend = Gson().fromJson(it.t1, Recommend::class.java)
, tags = Gson().fromJson(it.t2, Tags::class.java)
)
RedisConfig.addCache("xxx:config", Gson().toJson(klass)).subscribe()
}.subscribe()
귀찮은건.. AI한테 ^^
728x90