Расшифровка Base64, а затем десериализация JSON для Pojo с Моши

У меня есть следующая полезная нагрузка JSON:

{
    "foo"  : "bar",
    "foo2" : "TCFNhbiBKb3NlMRgwFgYDVQQK"
}

Значение ключа Json foo2 имеет значение, которое является строкой Json в кодировке base64. Например, когда значение foo2 is Base64.decoded(), вышеупомянутый Json будет выглядеть примерно так:

{
     "foo"  : "bar",
     "foo2" : "{"cat":"meow","dog":"woof"}"
}

Текущее решение

public class Message {
    public String foo;
    public AnimalSound foo2;
}

public class AnimalSound {
    public String cat;
    public String dog;
}

public class AnimalSoundAdapter {

    private final Moshi moshi;

    public AnimalSoundAdapter(Moshi moshi) {
         this.moshi = moshi;
    }

    /** toJson omitted */

    @FromJson AnimalSound fromJson(String foo2) {
         //base64 decode
         String decoded = Base64.decode(foo2);
         //deserialize the json string to the pojo
         return moshi.adapter(AnimalSound.class).fromJson(decoded);
    }
}

Код клиента будет выглядеть так:

Moshi moshi = new Moshi.Builder()
     .add(new AnimalSoundAdapter(new Moshi.Builder().build()))
     .build();

JsonAdapter<Message> adapter = moshi.adapter(Message.class);
Message message = adapter.fromJson(json);

Есть ли лучшее решение?

Я хотел бы знать, можно ли избежать AnimalSoundAdapter нужен экземпляр Моши.

0 ответов

Другие вопросы по тегам