Android开发Android知识Android技术知识

Json解析总结

2018-02-06  本文已影响0人  视野跳动

前言:在Android开发中我们避免不了从服务端获取数据,而服务端返回的数据基本上都是Json格式的,今天乘着公司不忙,特地总结一下Json的几种解析方式。

一、Json是什么?

JSON是一种取代XML的数据结构,和xml相比,它更小巧但是性能仍然很好,由于它的小巧所以网络传输数据使用的流量更少,传输的速度更快。JSON就是一串字符串 只不过元素会使用特定的符号标注。
Json语法:

所以 {"name": "张三"} 可以理解为是一个包含name为张三的对象
而[{"name": "张三"},{"name": "李四"}]就表示包含两个对象的数组
当然了,你也可以使用{"name":["Michael","Jerry"]}来简化上面的步骤,这是一个拥有一个name数组的对象

二、Json怎么用?

生成json数据(这里只是简单生成了一个Json对象,这里我们重点放在Json解析上)

 JSONObject jsonObject = new JSONObject();
 jsonObject.put("name", "张三");
 jsonObject.put("age",18);

三、Json解析

这里三种方式难度依次递进,掌握了前两种几乎就掌握了第三种,练习好了第三种以后碰到即使很复杂的数据也是这种套路,亲测没毛病!

①Json对象解析

   /*   {
             "name":"大白",
             "age":2
             }*/
    String str1 = "{\n" +
            "              \"name\":\"大白\",\n" +
            "             \"age\":2\n" +
            "             }";

JSONObject jsonObject = new JSONObject(str1.toString());
        String name = jsonObject.getString("name");
        int age = jsonObject.getInt("age");
        Str1 str1 = new Str1();
        str1.setName(name);
        str1.setAge(age);

②json数组解析

  /*
    [
    {"name":"张三","age":18},
    {"name":"李四","age":19},
    {"name":"王五","age":20}
    ]
     */
    String str2 = "  [\n" +
            "    {\"name\":\"张三\",\"age\":18}, \n" +
            "    {\"name\":\"李四\",\"age\":19}, \n" +
            "    {\"name\":\"王五\",\"age\":20}    \n" +
            "    ]  ";

        JSONArray jsonArray = new JSONArray(str2.toString());
        ArrayList<Str2> list2 = new ArrayList<>();
        JSONObject jsonObject = null;
        Str2  str2 = null;
        for (int i=0;i<jsonArray.length();i++) {
            jsonObject = jsonArray.getJSONObject(i);
            str2 = new Str2();
            str2.setName(jsonObject.getString("name"));
            str2.setAge(jsonObject.getInt("age"));
            list2.add(str2);
            str2 = null;
        }

③json对象和数组解析

 /*
    {
    "banji": "初中一班",
    "message": "1",
    "student": [{
        "name": "张三",
        "age": 18
    }, {
        "name": "李四",
        "age": 19
    }, {
        "name": "王五",
        "age": 20
    }]
}
     */
    String str3 = "{\n" +
            "\t\"banji\": \"初中一班\",\n" +
            "\t\"message\": \"1\",\n" +
            "\t\"student\": [{\n" +
            "\t\t\"name\": \"张三\",\n" +
            "\t\t\"age\": 18\n" +
            "\t}, {\n" +
            "\t\t\"name\": \"李四\",\n" +
            "\t\t\"age\": 19\n" +
            "\t}, {\n" +
            "\t\t\"name\": \"王五\",\n" +
            "\t\t\"age\": 20\n" +
            "\t}]\n" +
            "}";

        JSONObject jsonObject  = new JSONObject(str3.toString());
        ArrayList<Str3.Student> list3 = new ArrayList<>();
        Str3 str3 = new Str3();
        String banji = jsonObject.getString("banji");
        String message = jsonObject.getString("message");
        //对student集合进行解析
        JSONArray students = jsonObject.getJSONArray("student");
        for (int i=0;i<students.length();i++) {
            JSONObject jsonObject1 = students.getJSONObject(i);
            String name = (String) jsonObject1.get("name");
            int age = (int) jsonObject1.get("age");
            Str3.Student student  = new Str3.Student();
            student.setName(name);
            student.setAge(age);
            list3.add(student);
            student  = null;
        }

        str3.setBanji(banji);
        str3.setMessage(message);
        str3.setStudents(list3);

总结:从服务端返回的数据一般都是第三种格式的,现在想一下如果student中的属性除了name和age之外还有weigth、aihao(体重、爱好)等等很多属性,那么代码量又要增加了,再想一下如果返回的数据包含很多像student这样的数组那我们Json解析的部分就真的要写好多好多这样无聊的代码了,这里相应实体类没有贴出来。实际项目开发中,数据解析是很多的,这些操作如果我们自己写就很烦人,所以实际开发中一般都是用Gson+GsonFormat(Gson库解析Json数据+GsonFormat帮助我们快速新建实体类)
晋级篇:Gson+GsonFormat快速解析Json
最后:推荐一个网站在线Json校验可以帮助校验Json格式的数据,非常好使
项目源码:http://t.cn/R8uyrbo

上一篇 下一篇

猜你喜欢

热点阅读