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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用Android sdk自帶的jsonReader來解析jsonAndroidJSON
- JSON解析器之Gson、FastJson、JacksonJSONAST
- Eclipse安裝GSON,使用GSON轉換Java Object到JSONEclipseJavaObjectJSON
- Android Gson使用詳解Android
- Android:用GSON 五招之內搞定任何JSON陣列AndroidJSON陣列
- android解析HashMap格式的jsonAndroidHashMapJSON
- 使用JSONPath解析JSON資料JSON
- Gson使用總結
- Json和Map互轉,三個包(org.json/net.sf.json/com.google.gson)JSONGo
- 【JSON解析】淺談JSONObject的使用JSONObject
- kotlin的Gson的使用Kotlin
- Gson原始碼解析和它的設計模式原始碼設計模式
- 使用Javascript 開發個JSON解析庫JavaScriptJSON
- 原創:struts2+json+android整合開發解析前奏JSONAndroid
- Android Studio中引入Gson依賴(簡述版)Android
- Android 以OKhttp + Gson 提交資料到伺服器AndroidHTTP伺服器
- java json解析jar包基本使用記錄JavaJSONJAR
- 使用cJSON庫對JSON格式進行解析JSON
- Flutter json解析json_serializable的使用及自動化生成模板FlutterJSON
- Exercise:JSON解析JSON
- cJSON:解析JSONJSON
- js json解析JSON
- Android ToolBar 使用完全解析Android
- Android IntentService 的使用和解析AndroidIntent
- 新一代Json解析庫Moshi使用及原理解析JSON
- 原創:struts2+json+android開發整合解析終結JSONAndroid
- 【Azure Developer】使用.Net Core解析JSON的筆記DeveloperJSON筆記
- 使用 Acorn 來解析 JavaScriptJavaScript
- Golang 流式解析 JsonGolangJSON
- 用JS解析JSONJSON
- java解析json listJavaJSON
- Swift iOS : 解析jsonSwiftiOSJSON
- json解析模組JSON
- Spring Boot 中使用 JSON Schema 來校驗複雜JSON資料Spring BootJSON
- Python JSON 使用指南:解析和轉換資料PythonJSON
- Android自帶Json庫使用引發的問題AndroidJSON
- gson-plugin告別Json資料型別不一致(一)PluginJSON資料型別
- Android 沉浸式解析和輪子使用Android