說到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();
取其他字段或者字段也是以此類推,是不是感覺終極簡單呢?當然這兩種方式各有利弊,在開發過程中大家可以權衡利弊,擇優選擇。