Gson:解析对象内部数组中的对象
Gson: parse objects in array inside an object
我正在开发一个 Android 应用程序,使用 Retrofit,并试图解决这个问题。
后台人员直到昨天才给我发了以下回复:
[
{"id":1,"key1":"value1", "key2":"value2"},
{"id":2, "key1":"value1", "key2":"value2"}
]
现在,我想把它改成这样:
{"response":
[
{"id":1,"key1":"value1","key2":"value2"},
{"id":2,"key1":"value1","key2":"value2"}
],
"page":1,
"count":2
}
所以,基本上,他们向我发送了包含对象的数组 "response",然后是一些关于分页的元数据。
现在,我的问题是:如何使用 Gson 解析它?
目前我的代码是:
POJO:
public class MyObject{
private int id;
private String key1;
private String key2;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getKey1() {
return key1;
}
public void setKey1(String key1) {
this.key1 = key1;
}
public String getKey2() {
return key2;
}
public void setKey2(String key2) {
this.key2 = key2;
}
}
改造界面:
public interface Api {
@GET("/route")
void listObjects(Callback<List<Object>> callBack);
}
这就是我初始化 Retrofit 的方式:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("http://example.com")
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
api = restAdapter.create(Api.class);
以及我是如何消费它的:
public void getObjects(final Handler handler) {
api.listObjects(new retrofit.Callback<List<Object>>() {
@Override
public void success(List<Object> objects, retrofit.client.Response response) {
handler.onSuccess(objects);
}
@Override
public void failure(RetrofitError error) {
handler.onError();
}
});
}
所以我想解析它,但我不知道如何使用 Retrofit 和 Gson 来解析它。
提前致谢!
我使用 This 网站生成了这些 pojo。
外层class
package com.example;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
public class Response {
@Expose
private List<Response_> response = new ArrayList<Response_>();
@Expose
private Integer page;
@Expose
private Integer count;
/**
*
* @return
* The response
*/
public List<Response_> getResponse() {
return response;
}
/**
*
* @param response
* The response
*/
public void setResponse(List<Response_> response) {
this.response = response;
}
/**
*
* @return
* The page
*/
public Integer getPage() {
return page;
}
/**
*
* @param page
* The page
*/
public void setPage(Integer page) {
this.page = page;
}
/**
*
* @return
* The count
*/
public Integer getCount() {
return count;
}
/**
*
* @param count
* The count
*/
public void setCount(Integer count) {
this.count = count;
}
}
内层class
package com.example;
import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
public class Response_ {
@Expose
private Integer id;
@Expose
private String key1;
@Expose
private String key2;
/**
*
* @return
* The id
*/
public Integer getId() {
return id;
}
/**
*
* @param id
* The id
*/
public void setId(Integer id) {
this.id = id;
}
/**
*
* @return
* The key1
*/
public String getKey1() {
return key1;
}
/**
*
* @param key1
* The key1
*/
public void setKey1(String key1) {
this.key1 = key1;
}
/**
*
* @return
* The key2
*/
public String getKey2() {
return key2;
}
/**
*
* @param key2
* The key2
*/
public void setKey2(String key2) {
this.key2 = key2;
}
}
然后 Api 调用如下所示。
public interface Api {
@GET("/route")
void listObjects(Callback<Response> callBack);
}
我正在开发一个 Android 应用程序,使用 Retrofit,并试图解决这个问题。
后台人员直到昨天才给我发了以下回复:
[
{"id":1,"key1":"value1", "key2":"value2"},
{"id":2, "key1":"value1", "key2":"value2"}
]
现在,我想把它改成这样:
{"response":
[
{"id":1,"key1":"value1","key2":"value2"},
{"id":2,"key1":"value1","key2":"value2"}
],
"page":1,
"count":2
}
所以,基本上,他们向我发送了包含对象的数组 "response",然后是一些关于分页的元数据。
现在,我的问题是:如何使用 Gson 解析它?
目前我的代码是:
POJO:
public class MyObject{
private int id;
private String key1;
private String key2;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getKey1() {
return key1;
}
public void setKey1(String key1) {
this.key1 = key1;
}
public String getKey2() {
return key2;
}
public void setKey2(String key2) {
this.key2 = key2;
}
}
改造界面:
public interface Api {
@GET("/route")
void listObjects(Callback<List<Object>> callBack);
}
这就是我初始化 Retrofit 的方式:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("http://example.com")
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
api = restAdapter.create(Api.class);
以及我是如何消费它的:
public void getObjects(final Handler handler) {
api.listObjects(new retrofit.Callback<List<Object>>() {
@Override
public void success(List<Object> objects, retrofit.client.Response response) {
handler.onSuccess(objects);
}
@Override
public void failure(RetrofitError error) {
handler.onError();
}
});
}
所以我想解析它,但我不知道如何使用 Retrofit 和 Gson 来解析它。
提前致谢!
我使用 This 网站生成了这些 pojo。
外层class
package com.example;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
public class Response {
@Expose
private List<Response_> response = new ArrayList<Response_>();
@Expose
private Integer page;
@Expose
private Integer count;
/**
*
* @return
* The response
*/
public List<Response_> getResponse() {
return response;
}
/**
*
* @param response
* The response
*/
public void setResponse(List<Response_> response) {
this.response = response;
}
/**
*
* @return
* The page
*/
public Integer getPage() {
return page;
}
/**
*
* @param page
* The page
*/
public void setPage(Integer page) {
this.page = page;
}
/**
*
* @return
* The count
*/
public Integer getCount() {
return count;
}
/**
*
* @param count
* The count
*/
public void setCount(Integer count) {
this.count = count;
}
}
内层class
package com.example;
import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
public class Response_ {
@Expose
private Integer id;
@Expose
private String key1;
@Expose
private String key2;
/**
*
* @return
* The id
*/
public Integer getId() {
return id;
}
/**
*
* @param id
* The id
*/
public void setId(Integer id) {
this.id = id;
}
/**
*
* @return
* The key1
*/
public String getKey1() {
return key1;
}
/**
*
* @param key1
* The key1
*/
public void setKey1(String key1) {
this.key1 = key1;
}
/**
*
* @return
* The key2
*/
public String getKey2() {
return key2;
}
/**
*
* @param key2
* The key2
*/
public void setKey2(String key2) {
this.key2 = key2;
}
}
然后 Api 调用如下所示。
public interface Api {
@GET("/route")
void listObjects(Callback<Response> callBack);
}