GSON解析JSON中的问题
我在GSON的JSON解析中遇到了问题 我的回答是GSON解析JSON中的问题,json,performance,gson,Json,Performance,Gson,我在GSON的JSON解析中遇到了问题 我的回答是 {"services":[{"service":{"name":"asd","id":"1"}}, {"service":{"name":"asdf","id":"2"}}, {"service":{"name":"asdfg","id":"3"}}]} 如何解析这个响应 意味着我在创建上述响应类时遇到问题 我创建了服务类,但我对如何创建服务类感到困惑 public class services { @Seriali
{"services":[{"service":{"name":"asd","id":"1"}},
{"service":{"name":"asdf","id":"2"}},
{"service":{"name":"asdfg","id":"3"}}]}
如何解析这个响应
意味着我在创建上述响应类时遇到问题
我创建了服务类,但我对如何创建服务类感到困惑
public class services {
@SerializedName("service")
ArrayList<service> list;
public services(){
System.out.println("services constructor stuff");
list= new ArrayList<service>();
}
/**
* @return the list
*/
public ArrayList<service> getList() {
return list;
}
/**
* @param list the list to set
*/
public void setList(ArrayList<service> list) {
this.list = list;
}
注意:我无法更改响应,因此不建议更改
谢谢您Services.java
public class Services {
private List<Service> services;
public List<Service> getServiceList() {
return services;
}
public void setServiceList(List<Service> services) {
this.services = services;
}
}
您的json解析逻辑如下:
Gson gson = new Gson();
String s = "{\"services\":[{\"service\":{\"name\":\"asd\",\"id\":\"1\"}},{\"service\":{\"name\":\"asdf\",\"id\":\"2\"}},{\"service\":{\"name\":\"asdfg\",\"id\":\"3\"}}]}";
Services services = gson.fromJson(s, Services.class);
基本上,json字符串不是简单的json数组格式,它实际上是json对象中的json数组。因此,这意味着您需要两个类,一个表示json数组中的每个项-Service.java,另一个充当包含项列表的包装器。好的,我们需要创建一个中间层类来实现它。 Services.java
public class Services {
private ArrayList<ServiceWrapper> services = new ArrayList<ServiceWrapper>();
public ArrayList<ServiceWrapper> getServices() {
return services;
}
public void setServices(ArrayList<ServiceWrapper> services) {
this.services = services;
}
}
public class ServiceWrapper {
private Service service;
public Service getService() {
return service;
}
public void setService(Service service) {
this.service = service;
}
}
public class Service {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Service.java
public class Services {
private ArrayList<ServiceWrapper> services = new ArrayList<ServiceWrapper>();
public ArrayList<ServiceWrapper> getServices() {
return services;
}
public void setServices(ArrayList<ServiceWrapper> services) {
this.services = services;
}
}
public class ServiceWrapper {
private Service service;
public Service getService() {
return service;
}
public void setService(Service service) {
this.service = service;
}
}
public class Service {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
下面是测试代码
Gson gson = new Gson();
String s = "{\"services\":[{\"service\":{\"name\":\"asd\",\"id\":\"1\"}},{\"service\":{\"name\":\"asdf\",\"id\":\"2\"}},{\"service\":{\"name\":\"asdfg\",\"id\":\"3\"}}]}";
Services services = gson.fromJson(s, Services.class);
for(ServiceWrapper serviceWrapper : services.getServices()){
System.out.println(serviceWrapper.getService().getId());
System.out.println(serviceWrapper.getService().getName());
}
@T.J.Crowder我已经编辑了问题thank you@test:引用您迄今为止尝试过的代码,这将帮助人们帮助您。@spiritwlker您检查过getServiceList()的大小了吗?它为我打印了3。您使用的是哪个版本的GSON?您是对的,谢谢,还有一个问题是我们可以使用ArrayList代替Listplz吗?您可以尝试获取值,因为它在all@test,是的,您是对的,它无法检索服务中的值。我已经在另一个答案框中发布了新的解决方案。它经过全面测试,并按预期打印值。