在網絡上傳輸資料時最常用的兩種格式有:XML和JSON。其中JSON格式資料解析有JSONObject,GSON等方法。
假設在伺服器上存在一個get_data.json檔案,檔案内容為:
[{"id":"5","version":"5.5","name":"clash of clans"},
{"id":"6","version":"7.0","name":"boom beach"},
{"id":"7","version":"3.5","name":"clash royale"}]
假設已經使用OkHttp向伺服器請求該檔案,并将結果儲存在jsonData字元串裡。
1.JSONObject解析
JSONObject是官方提供的解析方法,具體代碼如下:
private void parseJSONWithJSONObject(String jsonData){
try{
JSONArray jsonArray = new JSONArray(jsonData);//定義一個JSON數組,并将資料傳到數組裡面
for(int i = 0;i < jsonArray.length();i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);//建立JSONObject對象并将數組内的資料傳入對象中
String id = jsonObject.getString("id");
String name = jsonObject.getString("name");
String version = jsonObject.getString("version");
Log.d("MainAcvitity","id is " + id);
Log.d("MainAcvitity","name is " + name);
Log.d("MainAcvitity","version is " + version);
}
}catch (Exception e){
e.printStackTrace();
}
}
上述代碼很簡單,首先定義了一個jsonArray數組,并将從伺服器上擷取的資料傳入數組當中,此時jsonArray數組的每個數組單元都是一個JSONObject對象,每個JSONObject對象都包含id、name、version等資料。然後建立一個JSONObject變量引用該數組上的每個JSONObject對象,并通過JSONObject對象的getString()方法将資料儲存到字元串當中即可。
2.GSON解析
使用GSON需要先添加GSON庫的依賴,在app/build.gradle檔案的dependences閉包中添加一句:
compile'com.google.code.gson:gson:2.7'
GSON的神奇之處在于它能夠将一段JSON格式的字元串映射成一個對象,然後從該對象中取出資料即可。步驟如下:
(1)首先需要定義一個app類,代碼如下:
public class App {
private String id;
private String name;
private String version;
public String getId(){
return id;
}
public void setId(String id){
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getVersion(){
return version;
}
public void setVersion(String version){
this.version = version;
}
}
app類中有id、name、version三個成員變量,還有指派和擷取該三個變量的方法。
(2)定義完app類之後就可以使用它了,代碼如下:
private void parseJSONWithGSON(String jsonData){
Gson gson = new Gson();//建立GSON執行個體
List<App> appList = gson.fromJson(jsonData,new TypeToken<List<App>>(){}.getType());//傳入資料開始解析
for (App app : appList){
Log.d("MainAcvitity","id is " + app.getId());
Log.d("MainAcvitity","name is " + app.getName());
Log.d("MainAcvitity","version is " + app.getVersion());
}
}
首先建立一個GSON執行個體,然後調用執行個體的fromJson()方法,方法有兩個參數,一個是待解析的資料,一個是期望解析成的資料類型,這裡是一個app對象清單,将解析之後的資料指派給一個app對象清單變量:appList,最後從appList中取出資料即可。