2017-12-20 5 views
1

Map<String, Any>의 형식으로 JSON을 해당 java/kotlin 객체로 변환하는 가장 효율적인 방법은 무엇입니까?Gson Map <String, Any> to Object

지금은 어리석은 구현처럼 보이는 것을 사용해야합니다.

gson.fromJson(gson.toJson(mapToConvert), typeToken)

어떤 제안이?

답변

1

사용할 수 JsonElement A : 잘

gson.fromMap<Foo>(map) 
+0

:

inline fun <reified T : Any> Gson.fromMap(map: Map<*, *>) { return fromJson(toJsonTree(map, T::class.java) } 

그런 다음이처럼 호출 할 수 있습니다 :

val jsonElement = gson.toJsonTree(map) val foo = gson.fromJson(jsonElement, Foo::class.java) 

당신은이 유틸리티 함수와 더 좋은 볼 수 있습니다 , 그게 그냥 똑같은, 내 목표는 하나의 여분의 gson 변환을 피하는 것입니다 –

+0

@martynmlostek k 아니, 그렇지 않아. 'toJson'이 문자열로 변환한다. 'toJsonTree'는이를 JSON 요소 트리 (['JsonElement'] (https://google.github.io/gson/apidocs/com/google/gson/JsonElement.html))의 메모리 내 표현으로 변환합니다. 나는 당신이 의미하는 것을 본다. 나는 Gson이 이것을 할 수있는 메커니즘을 가지고 있지 않다고 생각한다. [이것은 Jackson과 더 직접적으로 가능합니다] (https://stackoverflow.com/a/16430704/7366707). – Moira

+0

좋아요, 정확히 내가 필요한 것은 아니지만이 경우에는 (개조로 사용) gson 변환으로 1을 감할 수 있습니다 (총 2 개까지). 감사. 아무도 다른 사람이 며칠 내에 대답하지 않으면 해결책으로 표시 할 것입니다. –

관련 문제