原来一直都是使用Android自带的JsonArray JsonObject来解析Json数据
今天发现使用Gson来解析很省事,下面是一个简单的例子
创建一个Person类和Email类分别如下
Person.java
public class Person {
private String name;
private int age;
private Email email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Email getEmail() {
return email;
}
public void setEmail(Email email) {
this.email = email;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", email=" + email
+ "]";
}
/**
* @param name
* @param age
* @param email
*/
public Person(String name, int age, Email email) {
super();
this.name = name;
this.age = age;
this.email = email;
}
}
Email.java
public class Email {
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
/**
* @param address
*/
public Email(String address) {
super();
this.address = address;
}
@Override
public String toString() {
return "Email [address=" + address + "]";
}
}
在Activity里面先生成一个Json数据
public void onGetJsonClick(View v) {
List<Person> persons = new ArrayList<Person>();
for (int i = 0; i < 5; i++) {
Person p = new Person("test" + i, i+20, new Email("test@gmail.com"));
persons.add(p);
}
Gson gson = new Gson();
jsonString = gson.toJson(persons);
Log.i("GsonActivity", jsonString);
tvshow.setText(jsonString);
}
jsonString 就是我们生成的json数据,下面既可以解析这个数据啦
public void onParseJsonClick(View v) {
if (!TextUtils.isEmpty(jsonString)) {
Gson gson = new Gson();
List<Person> persons = gson.fromJson(jsonString, new TypeToken<List<Person>>(){}.getType());
int totalAge = 0;
String totalEmail = "";
for (Person p : persons) {
totalAge += p.getAge();
totalEmail += p.getEmail().getAddress();
}
tvshow.setText(String.valueOf(totalAge) + " " + totalEmail);
}
}
可以看到上面的代码使用了TypeToken,它是gson提供的数据类型转换器,可以支持各种数据集合类型转换,再在数据集合里面去除Email对象(
p.getEmail().getAddress();
)。