android Json解析

Json解析是Android开发必须掌握的技术之一。本文讲的是我对于json解析的理解和使用。

1.简介

把对象转化为Json的时候,我们把其中的name-value按照一定的规则拼接成字符串。把Json字符串转化为对象时,利用反射获得对象当中的各个变量名(也即之前的name),然后再从Json字符串中提取出该变量名对应的值,然后赋值给该变量。也就是说,Json是通过网络传输数据的一种解决方案,toJson和fromJson是编解码方法。

2.使用

原生Android即支持Json的解析。为了说明问题,我创建一个简单的Student类:

class Student {
        public String name;
        public int age;
    }

然后我创建了Student的实例student:

Student student = new Student();
student.name = "hsji";
student.age = 25;

我们可以把student实例转化为Json字符串:

 public String studentToJson(Student student){
       StringBuilder sb = new StringBuilder();
       sb.append("{\"name\":\"")
               .append(student.name)
               .append("\",\"age\":")
               .append(student.age)
               .append("}");
       return sb.toString();
   }

针对student实例调用studentToJson方法后得到的Json字符串为{"name":"hsji","age":25}。

也可以上面的Json字符串再转化为对象实例:

public Student jsonTOStudent(String json){
        Student student = new Student();
        try {
            JSONObject jsonObject = new JSONObject(json);
            student.name = jsonObject.getString("name");
            student.age = jsonObject.getInt("age");
            return student;
        } catch (JSONException e) {
            e.printStackTrace();
            return null;
        }
    }

3.进阶

在实际的工作当中我没有使用上面的方法处理json数据,而是使用了"gson-2.2.4.jar"。这是谷歌提供的专门用来处理Json数据的jar包,网上可以很方便的搜到。

引入这个jar包之后,我们的工作变得轻松起来。下面还是通过具体的使用来说明。

还是使用上面student实例,我们通过jar包提供的方法把它转化为Json字符串:

Gson gson = new Gson();
String json = gson.toJson(student);

把Json字符串转化为对象:

Gson gson = new Gson();
String json = gson.toJson(student);
Student studentCopy = gson.fromJson(json,Student.class);

通过上面示例我们可以发现使用jar包之后,处理Json数据方便了很多。

接下来通过示例说一下如何操作复杂的对象:

首先创建对象类:

    class Student {
        public String name;
        public int age;
    }
    class Teacher {
        public String name;
        public boolean isHeadTeacher;
    }
    class Group{
        public int no;
        public ArrayList<Student> students;
        public Teacher teacher;
    }

我们看到Group这个类里面有一个组标号,一个学生列表,有一个老师。
下面我们创建这个组的实例:

        Group group = new Group();
        group.no = 1;

        Student student1 = new Student();
        student1.name = "李雷";
        student1.age = 13;

        Student student2 = new Student();
        student2.name = "韩梅梅";
        student2.age = 13;

        ArrayList<Student> students = new ArrayList<>();
        students.add(student1);
        students.add(student2);

        group.students = students;

        Teacher teacher = new Teacher();
        teacher.name = "Miss Gao";
        teacher.isHeadTeacher = false;

        group.teacher = teacher;

然后把它转化为Json字符串:

        String groupJson = gson.toJson(group);

再把Json字符串转化为实例对象:

        String groupJson = gson.toJson(group);
        Group groupCopy = gson.fromJson(groupJson,Group.class);

解析列表也是工作中遇到比较多的情况。下面介绍一下如何使用jar包来解析列表。上面把group转化为Json字符串之后,得到groupJson字符串,接下来我们就从该字符串当中取出students列表。

        try {
            JSONObject jsonObject = new JSONObject(groupJson);
            String studentsJson = jsonObject.opt("students")+"";
            ArrayList<Student> sList = gson.fromJson(studentsJson,
                    new TypeToken<ArrayList<Student>>(){}.getType());
        } catch (JSONException e) {
            e.printStackTrace();
        }

ok,完工!

 

posted @ 2015-07-30 18:31  听懂·动听  阅读(313)  评论(0编辑  收藏  举报