Simple&Natural

[Android] Moshi를 이용하여 JsonObject 형태의 데이터 파싱하기 본문

카테고리 없음

[Android] Moshi를 이용하여 JsonObject 형태의 데이터 파싱하기

Essense 2020. 11. 26. 08:29
728x90

newParameterizedType으로 원하는 타입을 Parameter로 포함하는 Type을 만든다.

해당 메소드는 다음과 같이 구현되어 있다.

/**
   * Returns a new parameterized type, applying {@code typeArguments} to {@code rawType}. Use this
   * method if {@code rawType} is not enclosed in another type.
   */
  public static ParameterizedType newParameterizedType(Type rawType, Type... typeArguments) {
    if (typeArguments.length == 0) {
      throw new IllegalArgumentException("Missing type arguments for " + rawType);
   

첫 번째 인자는 겉으로 드러나는 형태의 데이터 형식을 말한다. 

예를 들어 List<class, class> 라면 List를 의미한다.

JsonObject 형식은 Map<String, String>으로 맵핑되므로 첫 번째 인자로 Map::class.java를 넣어주어야 한다.

 

그리고 두 번째 부터는 해당 rawType에서 적용되는 인자들을 의미한다.

내 경우 String 두 개를 넣어주어야 한다.

 

 

이후 Moshi에서 해당 Parameter를 어떤 식으로 나타낼 건지 컬렉션을 이용해 알려주고 symbolListType을 넘겨주면

우리가 원하는 형태로 파싱할 수 있는 Adapter가 생성된다.

 

이후 사용하면 됨.

 

val string = remoteConfig.getString("currency_symbols")
Log.d("MyTag", "총 글자수: ${string.length}")
val symbolListType = Types.newParameterizedType(Map::class.java, String::class.java, String::class.java)
val symbolListAdapter = get(Moshi::class.java).adapter<Map<String, String>>(symbolListType)
val json = symbolListAdapter.fromJson(string)
Log.d("MyTag", "Json: ${json}")

 

 

 

 

참고자료

Jake Wharton의 답변

github.com/square/moshi/issues/78

 

How to parse a list? · Issue #78 · square/moshi

I'm trying to parse a a list but I can't find docs on how to do that. I already made my custom adapter class, but when I do the following: This doesn't work with lists JsonAdapter<my...< p=""> </my...<>

github.com

 

728x90