android使用Gson來解析json
Gson是更流行的解析json的庫裡,我自己一把很喜歡用Gson來解析,因為直接可以寫物件和json檔案相對應
對於一個標準的後臺返回:
{ "data": { "product_info": { "name": "澳斯貝貝 嬰兒長袖水晶絨睡袋 100cm 4", "image": "", "stock": 0 }, "task_list": [ { "task_id": 4, "status": "進行中" } ] }, "status": "success", "message": null }
我們可以這樣來構造解析物件:
public class HistoryResponse { public HistoryData data; public String status; public String message; }
public class ProductInfo { public String name; public String image; public int stock; }
public class HistoryData { public ProductInfo product_info; public ArrayList<Tasks> task_list; }
public class Tasks { public int id; public String status; }
解析程式碼很簡潔:
public void parseAssertDataUseGson() { InputStream is = null; try { is = this.getAssets().open("json2.json", Context.MODE_PRIVATE); int length = is.available(); byte[] buffer = new byte[length]; is.read(buffer); Reader response = new StringReader(new String(buffer)); Gson gson = new Gson(); HistoryResponse mydata = gson.fromJson(response,HistoryResponse.class); Log.d("TAG","<<<<mydata="+mydata.data.task_list.get(0).status); } catch (IOException ex) { ex.printStackTrace(); } }
程式碼在
有一點要注意,對於
[
{
"booid": 1,
"bookName": "aa",
"icon": "",
"book_description": "aa1"
},
{
"booid": 2,
"bookName": "bb",
"icon": "",
"book_description": "bb1"
},
{
"booid": 3,
"bookName": "cc",
"icon": "",
"book_description": "cc1"
}
]
這樣的json,我們需要用以下來解析
private void parseResponse(String response) { try{ Gson gson = new Gson(); JSONArray jsonArray = new JSONArray(response); ArrayList<Book> books; mBookResponse = new Gson().fromJson(response, new TypeToken<List<Book>>(){}.getType()); }catch (Exception ex) { ex.printStackTrace(); } }
public class Book { public int booid; public String bookName; public String icon; public String book_description; }
才不會出錯
如果json出現java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 81這個問題,就代表解析器expected是一個array不過
實際解析的是一個jsonObject的錯誤
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3407/viewspace-2818510/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Json解析之Gson庫JSON
- Android總結之json解析(FastJson Gson 對比)AndroidJSONAST
- 如何使用JSON和GSONJSON
- json解析效能比較(gson與jackson)JSON
- Eclipse安裝GSON,使用GSON轉換Java Object到JSONEclipseJavaObjectJSON
- JSON介紹及Android最全面解析方法(Gson、AS自帶org.son、Jackson解析)JSONAndroid
- 使用Android sdk自帶的jsonReader來解析jsonAndroidJSON
- JSON解析器之Gson、FastJson、JacksonJSONAST
- Android Gson使用詳解Android
- Java Json API:Gson使用簡單入門JavaJSONAPI
- 關於Gson解析的使用匯總
- android使用gson和泛型解析伺服器回撥的封裝Android泛型伺服器封裝
- 生成JSON資料--Gson(谷歌)方法JSON谷歌
- Java Json API:Gson序列化JavaJSONAPI
- android複雜json解析AndroidJSON
- Android:用GSON 五招之內搞定任何JSON陣列AndroidJSON陣列
- JSON資料解析:Gson(谷歌)和fastjson(阿里巴巴)的異同點JSON谷歌AST阿里
- android解析HashMap格式的jsonAndroidHashMapJSON
- Android系列---JSON資料解析AndroidJSON
- 使用jsoncpp解析jsonJSON
- Jackson Gson Json.simple 比較JSON
- Gson使用總結
- android JSON解析資料-解析天氣預報AndroidJSON
- Android手動建立和解析JsonAndroidJSON
- Android Retrofit 2.0(二)使用教程OkHttp3 + Gson + RxJavaAndroidHTTPRxJava
- 使用 Swift 進行 JSON 解析SwiftJSON
- json與gson工具轉換案例及區別JSON
- Android基礎之json資料解析AndroidJSON
- Android之json複雜資料解析AndroidJSON
- Android解析XML和JSON(部落格例子)AndroidXMLJSON
- Gson原始碼解析和它的設計模式原始碼設計模式
- 使用JSONPath解析JSON資料JSON
- javascript指令碼中使用json2.js解析jsonJavaScript指令碼JSON
- Android okHttp網路請求之Json解析AndroidHTTPJSON
- Json和Map互轉,三個包(org.json/net.sf.json/com.google.gson)JSONGo
- kotlin的Gson的使用Kotlin
- Gson簡要使用筆記筆記
- Gson – 比較兩個順序無關的json字串JSON字串