Json解析总结

作者: 视野跳动 | 来源:发表于2018-02-06 18:37 被阅读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

相关文章

  • json-1008

    json入门json实验json在项目中的应用总结 json练习题 json解析练习

  • 我看json

    这里 权威介绍了json 这里强烈对比了一下各种语言的各种包解析json的情况,最后总结了一种json解析雷区...

  • Json解析总结

    前言:在Android开发中我们避免不了从服务端获取数据,而服务端返回的数据基本上都是Json格式的,今天乘着公司...

  • JSON

    JSON解析(反序列化) JSON解析(序列化) JSON解析补充

  • Json解析方式

    1.传统的JSON解析 1.1 生成Json 1.2 解析Json 2.Gson解析Json 2.1生成Json ...

  • JSON解析数据

    JsonObject解析 和JSonArray解析: JSON创建和JSON解析: 一。效果图: 创建: 解析: ...

  • Swift 4 JSON 解析指南

    Swift 4 JSON 解析指南 Swift 4 JSON 解析指南

  • iOS中解析json格式数据的各种方法调用

    JSON解析的解析过程不重要,重要的是JSON解析之后对结果的处理JSON解析后是个dictionary,但是字典...

  • php生成和解析json

    解析json 生成json

  • 网络(一)-JSON和XML

    一. JSON解析 #######1.1 JSON解析 001 问:什么是JSON?答:(1)JSON是一种轻量级...

网友评论

    本文标题:Json解析总结

    本文链接:https://www.haomeiwen.com/subject/hbegzxtx.html