編輯:關於Android編程
一、Gson簡介
Gson(又稱Google Gson)是Google公司發布的一個開放源代碼的Java庫,主要用途為串行化Java對象為JSON字符串,或反串行化JSON字符串成Java對象。也就是Java對象與json字符串間的互相轉換,解析。
二、使用方法
Gson的應用主要為toJson與fromJson兩個轉換函數,而在使用這種對象轉換之前需先創建好對象的類型以及其成員才能成功的將JSON字符串成功轉換成相對應的對象。即先創建好對應的javabean,javabean中的字段與要轉換的json之間要一一對應,否則會出現解析失敗的情況。
將json解析成javabean對象:
javabean:
public class Person {
private String name;
private int age;
private String gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;}}
json字符串:{ "name":"zhangsan","age":20,"gender":"男"}
將此json字符串解析成java對象:
Person person = new Gson().fromJson(json, Person.class);
這樣就可以將json字符串解析成javabean對象。
插入一點,json字符串和JSONObject對象之間的轉換,因為有些地方可能需要json字符串,有些地方需要的是jsonobject對象
json字符串轉換成JSONObject對象:
JSONObject jsonobject = new JSONObject(json);
JSONObject對象轉換為json字符串
String jsonString = json.toString();
上面的情況只是一種最簡單的例子,假如json字符串稍微復雜一點,涉及到對象的嵌套
看下面的例子:
{
"status_code": "0",
"result": {
"card_edate": "1451491200",
"edate_remark": "2015年12月31日之前免費獲取",
"card_remark": "1、會員尊享多種超值特權\r\n2、會員專享預存500送50",
"merchant_id": "2",
"card_img": "http://www.yuelife.com/srdz_pic/baralogo.jpg",
"card_id": "2"
},
"status_desc": "ok"
}這是服務端返回的一個json串,這裡面就涉及到了對象的嵌套,json串裡面的result參數也是一個對象。
這種情況的處理方式如下:
JSONObject jsonObject = json.optJSONObject("result");這樣就又得到了一個JSONObject對象 然後又可以通過這個JSONObject對象來得到javabean對象或者直接進行解析。
如果要得到javabean對象,直接用fromjson即可,如果直接想解析result裡面的某個參數,那麼就進行如下操作:
String cardNumber = jsonobject.optString("card_id");這樣就可以得到cardNumber的數值。
上面的情況是對象的嵌套,還有一種情況是數組的嵌套,看下面的例子:
{
"status_code": "0",
"result": [
{
"Rows": [
{
"branch_longitude": "113.9760310000",
"branch_userid": "273",
"branch_addr": "深圳南山區深南大道9028號益田假日廣場內L3層",
"branch_status": "1",
"is_default": "1",
"branch_phone": "13316467909,18875900656",
"branch_creattime": "0",
"city": "深圳市",
"branch_park": "門前有停車位",
"province": "廣東",
"branch_guidelines": "11路公交車",
"branch_updatetime": "0",
"merchant_id": "2",
"branch_precision": "",
"branch_latitude": "22.5375870000",
"branch_id": "25",
"branch_name": "四海一家番禺店"
}
],
"shop_city": "深圳市"
},
{
"Rows": [
{
"branch_longitude": "113.3802380000",
"branch_userid": "273",
"branch_addr": "廣東省廣州市番禺區南村鎮番禺大道(原迎賓路)萬博中心A2棟1-2樓",
"branch_status": "1",
"is_default": "0",
"branch_phone": "13711112346,02038823585",
"branch_creattime": "0",
"city": "廣州市",
"branch_park": "門前有停車位",
"province": "廣東",
"branch_guidelines": "120路公交車",
"branch_updatetime": "0",
"merchant_id": "2",
"branch_precision": "",
"branch_latitude": "23.0032640000",
"branch_id": "26",
"branch_name": "四海一家番禺區南村鎮番禺店"
}
],
"shop_city": "廣州市"
}
],
"status_desc": "ok"
}上面是服務端返回的json對象,這個json稍微有點復雜,涉及到了對象的嵌套和數組的嵌套。
result字段的值是一個數組,數組裡面嵌套有對象和數組。
碰到這種情況,解決辦法其實很簡單,那就是將[]裡面的內容當作集合來處理,將{}裡面的內容當作對象來處理
所以這個json的解析,就先看result的[]內的內容,是由兩個{}也就是對象組成的,因此,將下面這一段定義為一個javabean,然後解析成對象
{
"Rows": [
{
"branch_longitude": "113.9760310000",
"branch_userid": "273",
"branch_addr": "深圳南山區深南大道9028號益田假日廣場內L3層",
"branch_status": "1",
"is_default": "1",
"branch_phone": "13316467909,18875900656",
"branch_creattime": "0",
"city": "深圳市",
"branch_park": "門前有停車位",
"province": "廣東",
"branch_guidelines": "11路公交車",
"branch_updatetime": "0",
"merchant_id": "2",
"branch_precision": "",
"branch_latitude": "22.5375870000",
"branch_id": "25",
"branch_name": "四海一家番禺店"
}
],
"shop_city": "深圳市"
}定義的javabean如下:
public class OrderSeatRows {
private List Rows;
private String shop_city;
public List getRows() {
return Rows;
}
public void setRows(List rows) {
Rows = rows;
}
public String getShop_city() {
return shop_city;
}
public void setShop_city(String shop_city) {
this.shop_city = shop_city;
}
} 因為該javabean中的rows字段也是由[]組成,也就是rows也是一個數組,因此,將rows當成一個集合,裡面的{}內容,也就是下面的內容也定義為一個javabean,解析成對象
public class OrderStoreBean {
private String branch_addr;
private String branch_userid;
private String branch_id;
private String branch_name;
private String province;
private String city;
private String branch_status;
private String branch_latitude;
private String branch_longitude;
private String is_default;
private String branch_phone;
private String branch_creattime;
private String branch_park;
private String branch_guidelines;
private String branch_updatetime;
private String merchant_id;
private String branch_precision;
public String getBranch_addr() {
return branch_addr;
}
public void setBranch_addr(String branch_addr) {
this.branch_addr = branch_addr;
}
public String getBranch_userid() {
return branch_userid;
}
public void setBranch_userid(String branch_userid) {
this.branch_userid = branch_userid;
}
public String getBranch_id() {
return branch_id;
}
public void setBranch_id(String branch_id) {
this.branch_id = branch_id;
}
public String getBranch_name() {
return branch_name;
}
public void setBranch_name(String branch_name) {
this.branch_name = branch_name;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getBranch_status() {
return branch_status;
}
public void setBranch_status(String branch_status) {
this.branch_status = branch_status;
}
public String getBranch_latitude() {
return branch_latitude;
}
public void setBranch_latitude(String branch_latitude) {
this.branch_latitude = branch_latitude;
}
public String getBranch_longitude() {
return branch_longitude;
}
public void setBranch_longitude(String branch_longitude) {
this.branch_longitude = branch_longitude;
}
public String getIs_default() {
return is_default;
}
public void setIs_default(String is_default) {
this.is_default = is_default;
}
public String getBranch_phone() {
return branch_phone;
}
public void setBranch_phone(String branch_phone) {
this.branch_phone = branch_phone;
}
public String getBranch_creattime() {
return branch_creattime;
}
public void setBranch_creattime(String branch_creattime) {
this.branch_creattime = branch_creattime;
}
public String getBranch_park() {
return branch_park;
}
public void setBranch_park(String branch_park) {
this.branch_park = branch_park;
}
public String getBranch_guidelines() {
return branch_guidelines;
}
public void setBranch_guidelines(String branch_guidelines) {
this.branch_guidelines = branch_guidelines;
}
public String getBranch_updatetime() {
return branch_updatetime;
}
public void setBranch_updatetime(String branch_updatetime) {
this.branch_updatetime = branch_updatetime;
}
public String getMerchant_id() {
return merchant_id;
}
public void setMerchant_id(String merchant_id) {
this.merchant_id = merchant_id;
}
public String getBranch_precision() {
return branch_precision;
}
public void setBranch_precision(String branch_precision) {
this.branch_precision = branch_precision;
}
}
將上面的類都定義好後,就可以開始解析了
先解析[]的內容,即先解析數組
Gson解析數組的方法如下:optJSONArray9()方法 jo為服務端返回的JSONObject對象
JSONArray orderJSONArray = jo.optJSONArray("result");經過上面的解析後,就得到了一個JSONArray對象,這個對象就可以根據實際情況,繼續解析。
if (null != orderJSONArray&& orderJSONArray.length() > 0) {
for (int i = 0; i < orderJSONArray.length(); i++) {
JSONObject cityJsonObject = orderJSONArray.getJSONObject(i);
OrderSeatRows orderRow = GsonUtils.toObject(cityJsonObject.toString(),OrderSeatRows.class);便利JSONArray對象,利用getJSONObject()方法,就可以得到JSONArray中所有的JSONObject對象,得到了JSONObject對象,就可以將json解析為之前定義好的對象了。
總結:
開發中一般用到的幾種數據模型,都在上面介紹到了,其實只要把握一個原則,看到[]解析成數組,看到{}解析成對象,那麼再復雜的json數據都可以很輕松的解析出我們想要的數據,為後面的開發作好數據准備。
Android獲取手機聯系人信息
Android如何獲取手機聯系人信息,本文為大家揭曉。獲取手機聯系人信息步驟: 1、獲取 ContentResolver ContentResolver resolver
oppo r9怎麼設置軟件後台長期運行
ColorOS3.0系統設計了一種省電機制,防止部分軟件在後台耗電,或者當軟件在後台運行存在耗電行為時,系統會自動將其關閉。那麼oppo r9怎麼設置軟件後
47.Android 自定義PopupWindow技巧
47.Android 自定義PopupWindow技巧Android 自定義PopupWindow技巧 前言 PopupWindow的寬高 PopupWindow定位在下
RecycleViewScrollHelper--RecyclerView滑動事件檢測的輔助類
目錄概述這是一個關於RecycleView滑動事件的輔助類,該輔助類可以檢測RecycleView滑動到頂部或者底部的狀態.可用於實現RecycleView加載更多或者刷