Android中解析JSON的两种方式

在android平台上,解析JSON一般有两种方式可供选择:

  1. android内置的org.json包

  2. google的开源gson库

    json解析首先需要明确待解析的是JSONObject 还是 JSONArray

以下将分别采用这两种技术解析JSON对象和JSON数组:

使用org.json包下的类

JSONObject

待解析的字符串:
{
“name”: “king”,
“age”: “20”,
“sex”: “male”
}

// 实体对象
Person person = new Person();
// 解析出json的值
JSONObject obj = new JSONObject(json);
// 赋值给对象的属性
person.name = obj.getString("name");
person.age = obj.getString("age");
person.sex = obj.getString("sex");

JSONArray

待解析的字符串:
[
{
“name”:”king1”,
“age”:”21”,
“sex”:”male”
},
{
“name”:”king2”,
“age”:”22”,
“sex”:”male”
},
{
“name”:”king3”,
“age”:”23”,
“sex”:”female”
}]

// 实体对象
JSONArray array = new JSONArray(json);
ArrayList<Person> list = new ArrayList<Person>();
// 遍历解析
for (int i = 0; i < array.length(); i++) {
    Person person = new Person();
    JSONObject item = array.getJSONObject(i);
    person.name = item.getString("name");
    person.age = item.getString("age");
    person.sex = item.getString("sex");
    list.add(bean);
}

使用google开源的java库:gson

JSONObject

  1. 把gson的jar包导入工程中
  2. 创建一个对象,包含待解析的字段,提供get和set方法、
public class Person {
    private String name;
    private String age;
    private String sex;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
}
  1. 使用Gson解析
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class);
person.name = person.getName();
person.age = person.getAge();
person.sex = person.getSex();

JSONArray

Gson gson = new Gson();
Type type = new TypeToken<ArrayList<Person>>() {}.getType(); 
List<Person> personArray = gson.fromJson(json, type);
List<Person> persons = new ArrayList<Person>();
for(Person person:personArray){
    persons.add(person);
}

你可能感兴趣的:(Android中解析JSON的两种方式)