如今json数据在网络开发中作为传输数据的使用已经超过了xml格式的应用。json数据的格式比较简单,易于解析,另外占用带宽小。
一般解析json数据的方法有两种,一个是运用android的SDK下面自带的包进行解析,一个是运用第三方的包进行解析,比如google出的Gson,还有阿里出的FastJson,其他的不赘述。
比如对于下面一个json数据的解析:
{"Name" : "zhangsan",
"Course":[
{"id":"1001","courseName":"计算机图形学","GPA":"4.0"},{"id":"1002","courseName":"离散数学","GPA":"3.5"}
]}
自带SDK解析
/**
* str为传入的json数据
* @param str
*/
public void readJson(String str){
try {
JSONObject jsonObject = new JSONObject(str);
String flag = jsonObject.getString("Name");
//获取jsonarray数组
JSONArray jsonArray = jsonObject.getJSONArray("Course");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject object = jsonArray.getJSONObject(i);
String id = object.getString("id");
String courseName = object.getString("courseName");
String GPA = object.getString("GPA");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
第二种,运用gson进行解析
首先需要导入gson开发的包,然后创建一个javabean
public class Course {
private String id;
private String courseName;
private String GPA;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
public String getGPA() {
return GPA;
}
public void setGPA(String gPA) {
GPA = gPA;
}
}
public class People {
private String Name;
private List<Course> course;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public List<Course> getCourse() {
return course;
}
public void setCourse(List<Course> course) {
this.course = course;
}
}
然后进行解析json
//str为获取的json数据,暂时置空
private String str ="";
public People init(String str){
Gson gson = new Gson();
Type type = new TypeToken<People>() {}.getType();
People people = gson.fromJson(str, type);
return people;
}
public void readJson2(){
People people = init(str);
String name= people.getName();
List<Course> courses = people.getCourse();
for (Course course : courses) {
String id = course.getId();
String courseName = course.getCourseName();
String gpa = course.getGPA();
}
}