Json解析总结

前言:在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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,208评论 0 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 如果你理解90%的利润在后端的话,那应该知道我们成交的目的不是为了单次的销售,而是要通过后面不断的“追销”策略来获...
    元兵阅读 225评论 0 0
  • 1.写一两段话(如回忆一个场景),其中包含有触觉和身体感觉。 栀子的香是情人的手。 初次见你,你像一条鱼一样游进我...
    和和打怪阅读 290评论 3 0
  • 新年在即,看着乱糟糟的飘窗台,感觉很是不爽,甚至都不愿意再多盯上它一眼。我想很多人都有着这样一种体会:"哎,看着乱...
    d9e3ede3fe6c阅读 525评论 0 1