android複雜json解析
JSON建構有兩種結構:物件和陣列
json簡單說就是javascript中的物件和陣列,所以這兩種結構就是物件和陣列2種結構,通過這兩種結構可以表示各種複雜的結構。
json簡單說就是javascript中的物件和陣列,所以這兩種結構就是物件和陣列2種結構,通過這兩種結構可以表示各種複雜的結構。
以下是專案中的一段json格式,也並不算很複雜,貼出解析方式和思路:
{
"result":true,"msgType":3,"count":16,"batchId":"hb20140711",
"companyFullName":"湖北省網博會展有限公司","goodsId":"P002",
"goodsName":"湖北▪葛店網際網路產業博覽會","goodsDes":"3AS.jpg",
"goodsImg":"/company/download/goods_img/9a036-4c39-418d-a1d7-d5dadba66ab3.jpg",
"menuList":[{"title":"參展引導","menuContent":"c.jpg\""c2.jpg\""c3.jpg\""},
{"title":"參展商家","menuContent":"參展企業名錄
1
XXX投資有限公司
2
XXX網路科技有限公司
3
XXX齋科技有限公司
"}, {"title":"展會概況","menuContent":"
博 覽 會 概 況
一、博覽會地點和日程安排
報到布展:2014年8月14-15日
08:30-17:00
開展時間:2014年8月16日
08:30-17:00
2014年8月17日
08:30-17:00
2014年8月18日
08:30-14:00
"}]}
分析:
1.單個實體有個多屬性
2.實體中存在集合
3.集合中也有各自的屬性
解決思路:
1.建立實體(商品資訊的實體、集合menuList中的實體)
2.商品實體類中建立List<集合menuList實體>
3.解析完基本商品資訊後將menuList集合新增到其中
商品實體資訊:GoodsResultInfo.java
/*******************************************************************************
*
* Copyright (c) Weaver Info Tech Co. Ltd
*
* GoodsResultInfo
*
* app.backend.model.GoodsResultInfo.java
* TODO: File description or class description.
*
* @author: gao_chun
* @since: 2014年9月22日
* @version: 1.0.0
*
* @changeLogs:
* 1.0.0: First created this class.
*
******************************************************************************/
package app.backend.model;
import java.io.Serializable;
import java.util.List;
/**
*@author gao_chun
*
*/
public class GoodsResultInfo implements Serializable{
private static final long serialVersionUID = 1L;
private String batchId;
private int count;
private String companyFullName;
private String goodsDes;
private String goodsId;
private String goodsImg;
private String goodsName;
//private String menuList;
private int msgType;
private boolean result;
private List<GoodsResultItem> mGoodsResultItem; //menuList集合
//get 、set 方法省略
}
menuList實體資訊:GoodsResultItem.java
/*******************************************************************************
*
* Copyright (c) Weaver Info Tech Co. Ltd
*
* GoodsResultItem
*
* app.backend.model.GoodsResultItem.java
* TODO: File description or class description.
*
* @author: gao_chun
* @since: 2014年9月22日
* @version: 1.0.0
*
* @changeLogs:
* 1.0.0: First created this class.
*
******************************************************************************/
package app.backend.model;
import java.io.Serializable;
/**
*@author gao_chun
*
*/
public class GoodsResultItem implements Serializable{
private String title;
private String menuContent;
//get 、 set 方法省略
}
/*******************************************************************************
*
* Copyright (c) Weaver Info Tech Co. Ltd
*
* AuthnParser
*
* web.demo.parse.LoginParser.java
* TODO: File description or class description.
*
* @author: gao_chun
* @since: 2014-9-22
* @version: 1.0.0
*
* @changeLogs:
* 1.0.0: First created this class.
*
******************************************************************************/
package app.backend.network.parser;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import android.text.TextUtils;
import app.backend.model.GoodsResultInfo;
import app.backend.model.GoodsResultItem;
import app.util.Log;
/**
* @author gao_chun
*
*/
public class GoodsResultParser{
/* (non-Javadoc)
* @see parseJson(org.json.JSONObject)
*/
public static GoodsResultInfo parseJson(String object) {
Log.i("GoodsResultParser ----------- >",object);
GoodsResultInfo mGoodsResultInfo; //結果資訊
List<GoodsResultItem> goodsItemList;//menuList中的集合
GoodsResultItem mGoodsItem; //menuList子條目
try {
if(object != null && !TextUtils.isEmpty(object))
{
JSONObject obj = new JSONObject(object);
mGoodsResultInfo = new GoodsResultInfo();
goodsItemList = new ArrayList<GoodsResultItem>();
mGoodsResultInfo.setResult(obj.getBoolean("result"));
mGoodsResultInfo.setMsgType(obj.getInt("msgType"));
mGoodsResultInfo.setCount(obj.getInt("count"));
mGoodsResultInfo.setBatchId(obj.getString("batchId"));
mGoodsResultInfo.setCompanyFullName(obj.getString("companyFullName"));
mGoodsResultInfo.setGoodsId(obj.getString("goodsId"));
mGoodsResultInfo.setGoodsName(obj.getString("goodsName"));
mGoodsResultInfo.setGoodsDes(obj.getString("goodsDes"));
mGoodsResultInfo.setGoodsImg(obj.getString("goodsImg"));
// menuList
JSONArray menuList = obj.getJSONArray("menuList");
if(menuList != null && menuList.length() > 0)
{
for (int i = 0; i < menuList.length(); i++)
{
JSONObject jsonItem = menuList.getJSONObject(i); // 獲取每一個json物件
mGoodsItem = new GoodsResultItem(); //menuList中的條目
mGoodsItem.setTitle(jsonItem.getString("title"));
mGoodsItem.setMenuContent(jsonItem.getString("menuContent"));
goodsItemList.add(mGoodsItem); //放入集合中
mGoodsResultInfo.setmGoodsResultItem(goodsItemList);//將集合放入商品實體類中
}
}
return mGoodsResultInfo;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
//解析結果資料,傳遞到頁面顯示
GoodsResultInfo mGoodsList = GoodsResultParser.parseJson(result);
//Intent resultIntent = new Intent(this,GoodsDetailsActivity.class);
//resultIntent.putExtra(RESULT,mGoodsList);
//startActivity(resultIntent);
GoodsResultInfo [batchId=hb20140711,
count=16, companyFullName=湖北省網博會展有限公司, goodsDes=<p><a target="_self" href="http://www.365yunshang.com/10805">
<img style="width: 310px; height: 383px;" src="http://xxx/company/ueditor1_3_5/jsp/upload/140637404.jpg"
title="[$1LWSKPQJ72_TY])3AS.jpg" border="0" height="383" hspace="0"
vspace="0" width="310"/></a></p>, goodsId=P002,
goodsImg=/company/download/goods_img/937ea036-4c39-418d-a1d7-d5dadba66ab3.jpg,
goodsName=湖北?葛店網際網路產業博覽會, menuList=null, msgType=3, result=true,
mGoodsResultItem=[app.backend.model.GoodsResultItem@42226fd8,
app.backend.model.GoodsResultItem@42226af0,
app.backend.model.GoodsResultItem@421ff478]]
當然此種解決方式不一定最完善,也可引入第三方開源jar來完成,但是內部實現方式和原理都是類同的。(此方式僅供參考)
相關文章
- Android之json複雜資料解析AndroidJSON
- JAVA 解析複雜的json字串JavaJSON字串
- [譯]在 Flutter 中解析複雜的 JSONFlutterJSON
- 學會用 Go 解析複雜 JSON 的思路GoJSON
- Python3 解析複雜結構的 jsonPythonJSON
- Flutter解析複雜JSON泛型方案--拋磚引玉篇FlutterJSON泛型
- 一個複雜的json例子JSON
- 使用ajax請求傳送複雜的json資料型別,並解決fastjson解析複雜的json資料型別的問題JSON資料型別AST
- android使用Gson來解析jsonAndroidJSON
- android解析HashMap格式的jsonAndroidHashMapJSON
- Android系列---JSON資料解析AndroidJSON
- Spring Boot 中使用 JSON Schema 來校驗複雜JSON資料Spring BootJSON
- android JSON解析資料-解析天氣預報AndroidJSON
- Android手動建立和解析JsonAndroidJSON
- Spark SQL:JSON資料來源複雜綜合案例實戰SparkSQLJSON
- Android基礎之json資料解析AndroidJSON
- Android解析XML和JSON(部落格例子)AndroidXMLJSON
- Android複雜資料流的“高效”渲染(二)Android
- Android okHttp網路請求之Json解析AndroidHTTPJSON
- 時間複雜度跟空間複雜度時間複雜度
- 時間複雜度和空間複雜度時間複雜度
- 時間複雜度與空間複雜度時間複雜度
- 複雜度分析複雜度
- XML Schema 複雜元素型別詳解:定義及示例解析XML型別
- Android ListView中複雜資料流的高效渲染(一)AndroidView
- 複雜度分析的套路及常見的複雜度複雜度
- 時間複雜度O(n)和空間複雜度時間複雜度
- 複雜性Complex與複雜Complicated區別 - Sonja
- 時間複雜度和空間複雜度 順序時間複雜度
- json解析模組JSON
- Golang json 解析GolangJSON
- json解析boolJSON
- js json解析JSON
- Exercise:JSON解析JSON
- Android總結之json解析(FastJson Gson 對比)AndroidJSONAST
- 淺析程式碼圈複雜度及認知複雜度複雜度
- 解析SwiftUI佈局細節(二)迴圈輪播+複雜佈局SwiftUI
- 解析 Twitter 前端架構 學習複雜場景資料設計前端架構