在Android開發中,我們經常會用到JSON來與網絡數據進行交互,下面我來介紹如何對JSON數據進行解析與製造
1.當我們需要對如下JSON串進行製造時:
{
"download":["userInfoId","meterNum","rfid","area","clientName","clientAddress"],
"operatorNum":“操作員編號”
}
首先我們分析上面的JSON串 它裏面包括download與operatorNum對象。download對象中又包括一個JSON數組,那麼首先我們可以將數組的內容按step1向下添加進去
接下來我們就可以把值放入主要的JSON對象中了(step2),接下來就可以將operatorNum的數據放入JSON對象中(step3),執行到step3時我們的JSON對象已經完成,最後
只需要將其轉化爲字符串就可進行使用了(step3).
public static String buildDownLoadJson(String operatornum)
throws JSONException {
JSONArray valueobj1 = new JSONArray(); //step1
valueobj1.put("userInfoId");
valueobj1.put("meterNum");
valueobj1.put("rfid");
valueobj1.put("area");
valueobj1.put("clientName");
valueobj1.put("clientAddress");
JSONObject KeyObj1 = new JSONObject();//
KeyObj1.put("download", valueobj1); //step2
KeyObj1.put("operatorNum", operatornum); //step3
String jsondata = KeyObj1.toString(); //step4
Log.i("JSON", jsondata);
return jsondata;
}
2.當我們需要解析JSON字符串時
{
"downloadCount":條數值,
"download":[{"userInfoId":“用戶表順序”,"meterNum":“表號值”,"rfid":"無線編號",
"area":"小區值","clientName":"客戶名稱值","clientAddress":”客戶地址值”},
{第2條值, 格式同上},……,{第N條值,格式同上}]
}
我們首先同樣分析該JSON串,仍然有兩個對象,download對象的值仍然是數組,可是與上面製造不同的是,這個裏面的數組包括的是多個對象而不是單純的值,那麼這個時
候我們該怎麼辦呢? 其實首先我們可以考慮着多個對象的值時相同的,那麼我可以定義一個模型類,模型類包括userInfoId,meterNum,rfid,area,clientName,clientAddress等字
段值(這個類我就不做贅述,相信大家都明白),接下來就是想主Object中添加值(step2 得到了對應的JSON數組),然後就可以將對應的數組遍歷取出它們每一個的值放入list
(step3)
public static List<ReadyTask> getList(String key1, String key2,
JSONObject obj) {
List<ReadyTask> list = new ArrayList<ReadyTask>();//step1
try {
JSONArray jsonArray = obj.getJSONArray(key1); //step2
int DownloadCount = obj.getInt(key2);
Log.d("downloadCount", String.valueOf(DownloadCount));
for (int i = 0; i < jsonArray.length(); i++) { //step3
String msg1 = jsonArray.getString(i);
JSONObject value = new JSONObject(msg1);
ReadyTask rt = new ReadyTask();
rt.setRFID(value.getString("rfid"));
rt.setMeterID(value.getString("meterNum"));
rt.setArea(value.getString("area"));
rt.setClientName(value.getString("clientName"));
rt.setClientAddress(value.getString("clientAddress"));
rt.setUserInfoId(value.getInt("userInfoId"));
Log.d("download", msg1);
list.add(rt);
}
} catch (JSONException e) {
e.printStackTrace();
}
return list;
}