Gson: отображение нескольких объектов JSON на один объект - PullRequest
0 голосов
/ 31 августа 2018

Предположим, у нас есть простой json:

"Book":
{
    "title": "Hello world",
    "metadata": 
     {
         "author": "Jeff"
     }
}

Есть ли простой способ игнорировать объект метаданных и помещать автора непосредственно в объект книги, используя gson? Должен ли я использовать десериализатор для этого или есть более простой способ?

Мне нужен такой класс:

public class Book
{
    private String title;
    private String author;

    //...
}

1 Ответ

0 голосов
/ 31 августа 2018

Использовать десериализатор. Примерно так:

public class BookDeserializer implements JsonDeserializer<Book> {

  @Override
  public Book deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context)
      throws JsonParseException {

    final JsonObject jsonObject = json.getAsJsonObject();
    final String title = jsonObject.get("title").getAsString();
    JsonElement metaElement = jsonObject.get("metadata");
    final String author = metaElement.get("author").getAsString();

    final Book book = new Book();
    book.setTitle(title);
    book.setAuthor(author);
    return book;
  }
}

Как это использовать:

sGson = new GsonBuilder()
        .registerTypeAdapter(Book.class, new BookDeserializer())
        .create();

Примечание: я предпочитаю использовать Константу вместо жестко закодированных строк, но это только для примера здесь;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...