聊一聊Android中的Json解析

說到Json,相信大家都不陌生。Json是一種輕量級的數據交換格式,也是目前開發中最常用的一種數據格式。

那麼,我們怎麼來解析一個Json串呢?第一步,要先會看一個Json串

在Json中,使用"{  }"包裹的內容代表一個對象,使用"[  ]"包裹的內容代表一個數組。當你知道這一點之後,Json的解析就可以開始了。

光說不練假把式,我在這裏放出一個Json串,本文會根據這個Json串進行解析。

{
    "code": 0, 
    "data": {
        "shopId": 1, 
        "faceValue": 4850.23, 
        "payPrice": 4000, 
        "shopNo": ["345678765456","12312234123"] 
    }, 
    "msg": "操作成功"
}

這就是一個非常經典的Json串,包含了對象和數組兩種格式。首先先來介紹第一種解析方式,使用JSONObject和JSONArray解析。顧名思義,JSONObject就是用來解析對象的,JSONArray就是用來解析數組的。

首先我們先來看這個串,最外層用"{  }"包裹,即是一個對象,所以我們先用JSONObject來解析第一層,假如我們用個String類型來存儲這個Json串,命名爲json。

JSONObject jobj = new JSONObject(new String(json));

這樣我們就解析了第一層,也就是通過jobj這個對象可以取 "code"、"data"、"msg"這幾個參數了。之後我們再往裏看,發現"code"是一個int類型的數據,"msg"是一個String類型,"data"則又是一個對象。

所以這裏,像"code","msg"這樣的參數,是隻被jobj這一個對象包裹,所以我們可以直接用jobj對象來取到這兩個參數:

int resultCode = jobj.getInt("code");
String msg = jobj.getString("msg");

通過getInt()拿到int類型,通過getString()拿到String類型,以此類推。接下來我們就可以來處理"data"這個對象了,這個對象也是在jobj中,看到了getInt()這樣的方法,肯定就會有一種靈光一閃的感覺。

JSONObject jsonObject = jobj.getJSONObject("data");

 這樣我們就可以拿到"data'這個對象了,也就是jsonObject。下面也就跟之前的解析一樣了,我們只需要從這個對象中取參數就好了。

int shopId = jsonObject.getInt("shopId");
double faceValue = jsonObject.getDouble("faceValue");
int payPrice = jsonObject.getInt("payPrice");

之後也就差一個數組了,其實取的方式和上面的也是大同小異。

JSONArray shopArray = jsonObject.getJSONArray("shopNo");

這樣我們就可以取到一個Json數組了,取數組中字段的方法與正常數組也沒有差別,我們只需要遍歷這個數組進行取值即可。

for(int i=0;i<shopArray.length;i++){
    shopArray.get(i);
}

在這個數組中裏面的類型只是簡單的String類型,當然在實際開發中,裏面也會是一個對象,或者再嵌套一層數組。需要我們層層解析。並且在實際開發中,通常習慣先判斷對象中有沒有這個字段,這個字段是否爲空,然後我們再進行取值。所以比如我要取"shopId"這個字段通常是這樣取值:

if(jsonObject.has("shopId")&&!jsonObject.isNull("shopId")){
    int shopId = jsonObject.getInt("shopId");
}

到此使用JSONObject和JSONArray解析的方式就結束了。相信一定有小夥伴發現,我靠,用這種方式解析太麻煩了,每個字段都需要判空,還需要一個字段一個字段的來取,這要是簡單的Json還好,這要是嵌套了好幾層,有幾十個甚至幾百個字段,那我的手不得敲折了?

您尚且別急,且由我來給你介紹第二種方法,即使用Gson進行解析。

Gson是谷歌官方推出的支持 Json -- Java Object 相互轉換的 Java序列化/反序列化 庫,比起上面的解析方式,使用Gson絕對讓你覺得簡單的想哭!

第一步:導入Gson依賴

dependencies {
    implementation 'com.google.code.gson:gson:2.8.4'
}

第二步:創建一個實體類

這裏解釋一下,我們使用Gson是需要通過一個實體類來進行解析,也就是我們常說的bean。強烈給大家推薦一個studio插件:GsonFormat,這個插件可以幫助我們一鍵把Json串轉化爲bean對象。

安裝後,只需要我們創建一個類,然後按Alt+s將Json串複製進去,點擊ok即可生成。如下:

這裏我創建的實體類名爲Shop。

第三步:開始解析 

1.創建一個Gson對象

Gson gson = new Gson();

2.調用方法轉化對象

Shop shopBean = gson.fromJson(json,Shop.class);

3.取值

String msg = shopBean.getMsg();

取其他字段或者字段也是以此類推,是不是感覺終極簡單呢?當然這兩種方式各有利弊,在開發過程中大家可以權衡利弊,擇優選擇。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章