代码之家  ›  专栏  ›  技术社区  ›  DennisVA

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

  •  -2
  • DennisVA  · 技术社区  · 6 年前

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

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

    有没有一种简单的方法可以忽略元数据对象并使用gson将author直接放入books对象中?我应该使用反序列化程序还是有更简单的方法?

    我需要这样的课程:

    public class Book
    {
        private String title;
        private String author;
    
        //...
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Bruno    6 年前

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

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