Gson:将多个json对象映射到单个对象

时间:2018-08-31 12:32:35

标签: android json gson mapping

假设我们有一个简单的json:

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

是否有一种简单的方法可以忽略元数据对象,并使用gson将作者直接放入books对象中?我应该为此使用解串器吗?还是有更简单的方法?

我需要一个像这样的课程:

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

    //...
}

1 个答案:

答案 0 :(得分:0)

使用反序列化器。像这样:

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();

注意:我更喜欢使用Constant而不是硬编码的字符串,但这仅是这里的示例;)