Расшифровка 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
нужен экземпляр Моши.