Json解析總結(jié)

前言:在Android開發(fā)中我們避免不了從服務(wù)端獲取數(shù)據(jù),而服務(wù)端返回的數(shù)據(jù)基本上都是Json格式的,今天乘著公司不忙,特地總結(jié)一下Json的幾種解析方式。

一、Json是什么?

JSON是一種取代XML的數(shù)據(jù)結(jié)構(gòu),和xml相比,它更小巧但是性能仍然很好,由于它的小巧所以網(wǎng)絡(luò)傳輸數(shù)據(jù)使用的流量更少,傳輸?shù)乃俣雀?。JSON就是一串字符串 只不過元素會(huì)使用特定的符號(hào)標(biāo)注。
Json語法:

  • {} 雙括號(hào)表示對象
  • [] 中括號(hào)表示數(shù)組
  • "" 雙引號(hào)內(nèi)是屬性或值
  • : 冒號(hào)表示后者是前者的值(這個(gè)值可以是字符串、數(shù)字、也可以是另一個(gè)數(shù)組或?qū)ο?

所以 {"name": "張三"} 可以理解為是一個(gè)包含name為張三的對象
而[{"name": "張三"},{"name": "李四"}]就表示包含兩個(gè)對象的數(shù)組
當(dāng)然了,你也可以使用{"name":["Michael","Jerry"]}來簡化上面的步驟,這是一個(gè)擁有一個(gè)name數(shù)組的對象

二、Json怎么用?

生成json數(shù)據(jù)(這里只是簡單生成了一個(gè)Json對象,這里我們重點(diǎn)放在Json解析上)

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

三、Json解析

這里三種方式難度依次遞進(jìn),掌握了前兩種幾乎就掌握了第三種,練習(xí)好了第三種以后碰到即使很復(fù)雜的數(shù)據(jù)也是這種套路,親測沒毛病!

①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數(shù)組解析

  /*
    [
    {"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對象和數(shù)組解析

 /*
    {
    "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集合進(jìn)行解析
        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);

總結(jié):從服務(wù)端返回的數(shù)據(jù)一般都是第三種格式的,現(xiàn)在想一下如果student中的屬性除了name和age之外還有weigth、aihao(體重、愛好)等等很多屬性,那么代碼量又要增加了,再想一下如果返回的數(shù)據(jù)包含很多像student這樣的數(shù)組那我們Json解析的部分就真的要寫好多好多這樣無聊的代碼了,這里相應(yīng)實(shí)體類沒有貼出來。實(shí)際項(xiàng)目開發(fā)中,數(shù)據(jù)解析是很多的,這些操作如果我們自己寫就很煩人,所以實(shí)際開發(fā)中一般都是用Gson+GsonFormat(Gson庫解析Json數(shù)據(jù)+GsonFormat幫助我們快速新建實(shí)體類)
晉級篇:Gson+GsonFormat快速解析Json
最后:推薦一個(gè)網(wǎng)站在線Json校驗(yàn)可以幫助校驗(yàn)Json格式的數(shù)據(jù),非常好使
項(xiàng)目源碼:http://t.cn/R8uyrbo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,565評論 0 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評論 19 139
  • 如果你理解90%的利潤在后端的話,那應(yīng)該知道我們成交的目的不是為了單次的銷售,而是要通過后面不斷的“追銷”策略來獲...
    元兵閱讀 259評論 0 0
  • 1.寫一兩段話(如回憶一個(gè)場景),其中包含有觸覺和身體感覺。 梔子的香是情人的手。 初次見你,你像一條魚一樣游進(jìn)我...
    和和打怪閱讀 327評論 3 0
  • 新年在即,看著亂糟糟的飄窗臺(tái),感覺很是不爽,甚至都不愿意再多盯上它一眼。我想很多人都有著這樣一種體會(huì):"哎,看著亂...
    d9e3ede3fe6c閱讀 592評論 0 1

友情鏈接更多精彩內(nèi)容