解析饲料与GSON的Android
我有以下形式的JSON: -解析饲料与GSON的Android
{
students: [
{
name:"ABC",
deptt:"Physics",
year:"1st"
},
{
name:"XYZ",
deptt:"Mathematics",
year:"2nd"
}
]
}
我从一个web服务,我称之为使用凌空库此响应。我将这个响应存储在一个字符串中。
现在要解析这个提要,我正在尝试使用GSON库。我创建了一个类叫学生如下: -
public class Students{
@SerializedName("name")
private String name;
@SerializedName("deptt")
private String deptt;
@SerializedName("year")
private String year;
public Students(String name,String deptt,String year)
{
this.name = name;
this.deptt = deptt;
this.year = year;
}
//followed by getters and setter for each member
}
编辑
后我到Web服务调用完成我调用另一个函数(如下解析饲料)
public void parseTheFeed(String data)
{
Log.d("Data",data);
Gson gSon = new Gson();
Students studentData = gSon.fromJson(data,Students.class); //data == feed from webservice
Log.d("StudentData-Title", studentData.getName());
}
请注意我在Volley的onResponse
中调用“parseTheFeed(String data)”方法。
但是我收到NullPointerException错误,同时使用Log.d语句。错误消息是“println需要消息”
您的模型与您想要表示的数据结构不匹配。从您的示例数据中,您的模型应该更像这样。然后Gson
将正确处理您指定的数据。
public class School {
public List<Student> students;
public static class Student {
private String name;
private String deptt;
private String year;
public Student(String name,String deptt,String year)
{
this.name = name;
this.deptt = deptt;
this.year = year;
}
}
}
通知您student
场实际上是Student
JSONObjects
一个JSONArray
和名单载于父JSONObject
使用上面你可以解析成由JSON容易
School school = new Gson().fromJson(data, School.class);
List<Student> students = school.students;
// do something with list of students
一个Java对象
另请注意@SerializedName
缺席。如果要更改字段的名称,则使用此注释。例如,如果我们想将School#students
字段命名为School#scholors
,我们会使用它。使用您的数据和我的模型类
public class School {
@SerializedName("students")
public List<Student> scholors;
...
}
这工作...所以基本上,我是错误的,同时从webservice建设饲料的模态类。谢谢。 –
,其中包装膜类Student
榜样不是绝对必要的。如果您的应用程序域模型没有开始的学校实体,并且您不希望为了JSON序列化而添加它,则可以直接将您的学生解组为List
。
// input is your web service response
JsonObject data = gson.fromJson(input, JsonObject.class);
// collect Students into a List
Type type = new TypeToken<List<Student>>() {}.getType();
List<Student> students = gson.fromJson(data.getAsJsonArray("students"), type);
// access a Student object
System.out.println(students.get(0).getName()); // ABC
这里Student
是老一套的POJO类(但命名为单数)
public class Student {
@SerializedName("name")
private String name;
@SerializedName("deptt")
private String deptt;
@SerializedName("year")
private String year;
public Student(String name, String deptt, String year)
{
this.name = name;
this.deptt = deptt;
this.year = year;
}
// followed by getters and setter for each member
}
告诉你如何分配'data'。问题就在那里。 – leeor
@爱好者: - 编辑了这个问题。在volley内部的onResponse中,我调用另一个名为'parseTheFeed(String data)'的方法,并传递'onResponse'(即。e结果)到'parseTheFeed(String data)' –
好像你作为参数传递的'data'是'null',告诉我们你如何调用'parseTheFeed'方法 – dazito