Movie movie1 = new Movie(); movie1.setMovie_name("A"); movie1.setMovie_year("1990"); movie1.setPerson_name("Alec Guinness"); Movie movie2 = new Movie(); movie1.setMovie_name("B"); movie2.setMovie_year("2010"); movie2.setPerson_name("Alec Guinness"); Movie movie3 = new Movie(); movie1.setMovie_name("C"); movie3.setMovie_year("1890"); movie3.setPerson_name("Liuoge"); List<Movie> lists = new ArrayList<Movie>(); lists.add(movie1); lists.add(movie2); lists.add(movie3);
db.save(lists);
把这段JSON代码,粘贴到http://www.bejson.com/网站校验一下,校验成功。这不是没错吗,为什么??原因是这是一个JSON Array,而不是一个JSON Object!!
JSON Array以中括号作为开头结尾,JSON Object以大括号作为开头结尾。
[
{
"Movie_name": "C",
"Movie_year": "1990",
"Person_name": "Alec Guinness"
},
{
"Movie_year": "2010",
"Person_name": "Alec Guinness"
},
{
"Movie_year": "1890",
"Person_name": "Liuoge"
}
]
查看源码(Cloudant Database的save方法会调用底层的CouchDbClientBase类中的put方法):
/** * Performs a HTTP PUT request, saves or updates a document. * * @return {@link Response} */ Response put(URI uri, Object object, boolean newEntity) { assertNotEmpty(object, "object"); HttpResponse response = null; try { final <strong><span style="color:#cc0000;">JsonObject </span></strong>json = getGson().<strong><span style="color:#cc0000;">toJsonTree</span></strong>(object).<span style="color:#cc0000;"><strong>getAsJsonObject</strong></span>(); String id = getAsString(json, "_id"); String rev = getAsString(json, "_rev"); if (newEntity) { // save assertNull(rev, "rev"); id = (id == null) ? generateUUID() : id; } else { // update assertNotEmpty(id, "id"); assertNotEmpty(rev, "rev"); } final HttpPut put = new HttpPut(buildUri(uri).pathToEncode(id).buildEncoded()); setEntity(put, json.toString()); response = executeRequest(put); return getResponse(response, Response.class, getGson()); } finally { close(response); } }
源码可以到这里查看。
solution:看来cloudant Database对象不能直接save列表,准确说是不能存储JSON Array,此时只需要写一个Wrapper类就可以了。
public class ListWrapper{ private List<Movie> data; public List<Movie> getData() { return data; } public void setData(List<Movie> data) { this.data = data; } }
ListWrapper listWrapper = new ListWrapper(); listWrapper.setData(lists);
db.save(listWrapper);
使用Wrapper方式的好处可以把整个想存储的对象存为一个data。
{ "_id": "60db071d12aa465797b4887f02c899b5", "_rev": "1-9fee3602a9a99890e0727fcb67073921", "<strong><span style="color:#cc0000;">data</span></strong>": [ { "Movie_name": "C", "Movie_year": "1990", "Person_name": "Alec Guinness" }, {
<pre name="code" class="javascript"> "Movie_name": "A","Movie_year": "2010", "Person_name": "Alec Guinness" }, {
<pre name="code" class="javascript"> "Movie_name": "B","Movie_year": "1890", "Person_name": "Liuoge" } ]}