如何使用 GSON 解析和缓存嵌套的 JSON 对象?

How to parse and cache nested JSON objects with GSON?

我正在实施 Android RESTful 客户端 API。我想使用 GSON 将所有传入的 JSON 响应解析到我的 java 模型中,然后使用 Sugar ORM 将所有数据缓存到数据库以供离线查看。

我有一个 "Author" 模型和一个 "Book" 模型。理想情况下,您应该能够通过这样做来解析和缓存作者:

Author author = new Gson().fromJson(jsonObject, Author.class);
author.save();  // Saves the record to the db

但是,我的 JSON 结构要复杂得多,我无法更改。此外,这不会分隔 Book 对象。例如,这里是将填充作者列表视图的 JSON 响应。嵌入作者的是一组书籍。

{
  "_links": {
    "self": {
      "href": "http://myapi.com/authors"
    }
  },
  "_embedded": {
    "authors": [
      {
        "id": 1,
        "name": "John Doe",
        "website": "http://johndoe.com",
        "email": "john.doe@myapi.com",
        "bio": "Est rem et dolores illo est. Non quaerat aut. Id doloribus sed dicta     exercitationem et. Perferendis aut necessitatibus debitis.\nEt earum est. Voluptatem minima     suscipit blanditiis. Porro fugiat aliquam quia. Eum error et quibusdam dolores est architecto et.",
        "likes_count": 4,
        "_links": {
          "self": {
            "href": "http://myapi.com/authors/1"
          }
        },
        "_embedded": {
          "group": null,
          "books": [
            {
              "id": 1,
              "name": "Book 1",
              "_links": {
                "self": {
                  "href": "http://myapi.com/books/1"
                }
              }
            }
          ]
        }
      },
      {
        "id": 2,
        "name": "Jane Doe",
        "website": "http://janedoe.com",
        "email": "jane.doe@myapi.com",
        "bio": "Excepturi dolorem laboriosam odio et quis itaque laudantium. Neque perspiciatis facere harum eligendi nemo veritatis ut. Qui occaecati facilis voluptatem ut consectetur placeat dolor. Veritatis quasi iste veniam aut. Expedita qui voluptate aut molestiae fuga quas itaque.\nVeritatis perspiciatis officiis quis dicta. Omnis voluptas possimus. Ut non rerum atque molestiae et consequatur aut. Quo molestiae animi aut nam voluptatem iusto.",
        "likes_count": 10,
        "_links": {
          "self": {
            "href": "http://myapi.com/authors/2"
          }
        },
        "_embedded": {
          "group": null,
          "books": [
            {
              "id": 2,
              "name": "A Book By Jane Doe",
              "_links": {
                "self": {
                  "href": "http://myapi.com/books/2"
                }
                }
              },
              {
                "id": 3,
                "name": "Another Book by Jane Doe",
                "_links": {
                "self": {
                  "href": "http://myapi.com/books/3"
                }
              }
            }
          ]
        }
      }
    ]
  }
}

这是我的作者模型:

public class Author extends SugarRecord<Author> {

    @SerializedName("id")
    private long authorId;
    private String name;
    private String website;
    private String email;
    private String bio;
    @SerializedName("likes_count")
    private int likesCount;
    private String href;

    ...
}

这是我的图书模型:

public class Book extends SugarRecord<Book> {

    @SerializedName("id")
    private long bookId;
    private String name;
    private String description;
    private String publisher;
    private int yearPublished;
    private String rating;
    @SerializedName("likes_count")
    private int likesCount;
    private String href;

    ...
}

目前,我只是遍历 JSON 作者数组,并使用上面的代码解析和缓存每个作者("href" 除外)。我的问题是,如何使用 GSON 将 Books 解析为它们自己的模型(不是 Author 模型的一部分)。这甚至可以用 GSON 实现吗?

感谢您的帮助,如果我需要说得更清楚,请告诉我!

是的,可以用 gson 解析复杂的 json 结构,如果你有一个非常大的 [=15],你可以实现 JsonDeserializer<T> 并根据需要解析你的 json =] response 在这种情况下它可能会给你带来一些内存问题最好使用 TypeAdapter<T> 这是一个很好的教程我希望它能帮助你 gson-deserialiser-example