2015-01-15 180 views
-1

我正在实现Android RESTful客户端API。我想使用GSON将所有传入的JSON响应解析到我的java模型中,然后使用Sugar ORM将所有数据缓存到数据库以供脱机查看。如何使用GSON解析和缓存嵌套的JSON对象?

我有一个“作者”模型和一个“书”模型。理想情况下,你应该能够通过这样来解析和缓存的作者:

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

然而,我的JSON结构要复杂得多,它不是东西,我可以改变。另外,这不会分离Book对象。例如,以下是将填充作者的ListView的JSON响应。嵌入作者是一系列的书籍。

{ 
    "_links": { 
    "self": { 
     "href": "http://myapi.com/authors" 
    } 
    }, 
    "_embedded": { 
    "authors": [ 
     { 
     "id": 1, 
     "name": "John Doe", 
     "website": "http://johndoe.com", 
     "email": "[email protected]", 
     "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": "[email protected]", 
     "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; 

    ... 
} 

现在,我只是通过作者的JSONArray迭代,并使用上面的代码解析并缓存每个作者(“href”除外)。我的问题是,如何使用GSON将书籍解析为他们自己的模型(不是作者模型的一部分)。 GSON甚至有可能吗?

谢谢你的帮助,让我知道如果我需要做出更清楚的事情!

回答

0

是的,它可以解析复杂的JSON结构与GSON,你可以实现JsonDeserializer<T>和解析你的JSON,只要你喜欢,如果你有一个非常大的JSON响应它可能会给你一些内存问题,在这种情况下,它更好地使用TypeAdapter<T>这里是一个很好的教程,我希望它能帮助你gson-deserialiser-example