• 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,完工!

  • 相关阅读:
    队列 和 线程 之GCD dispatch
    ios NSUserDefaults存储数据(偏好设置)
    Binary Tree postorder Traversal
    Binary Tree Inorder Traversal
    Binary Tree Preorder Traversal
    Rotate List
    Reversed Linked List(Reverse a singly linked list)
    Remove Element
    Swap Nodes in Pairs
    Add Two Numbers
  • 原文地址:https://www.cnblogs.com/hsji/p/4690252.html
Copyright © 2020-2023  润新知