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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gson:将多个json对象映射到单个对象相关的知识,希望对你有一定的参考价值。

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

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

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

我需要一个这样的课程:

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

    //...
}
答案

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

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而不是硬编码字符串,但它仅用于此处的示例;)

以上是关于Gson:将多个json对象映射到单个对象的主要内容,如果未能解决你的问题,请参考以下文章

Gson的学习与使用

如何使用GSON配置哪些POJO字段序列化为JSON?

在Gson中解析数组 - 每个对象都有一个标识符 - 2月14日[重复]

完全理解Gson:Gson反序列化

Gson 在单个 JSON 对象中使用两种 List 类型进行序列化

Android:将 json 值映射到 pojo