JSON數據的URL:http://1.wss1234.sinaapp.com/json.php
代碼在這:https://github.com/wss1942/Demos
這是JSON數據的內容
{"status":1,"message":"success","id":"123321","work_type_name":"\u7535","task_type_name":"\u5468\u68c0","start_time":"2014-10-27 08:00:00","end_time":"2014-11-27 08:00:00","remark":"\u6ce8\u610f\u5b89\u5168",
"datas":[{"rfid_num":"1111","coach_name":"\u7b2c\u4e00\u8f66\u53a2","train_name":"888"},{"rfid_num":"3A792749","coach_name":"\u7b2c\u4e8c\u8f66\u53a2","train_name":"888"},{"rfid_num":"3A792749","coach_name":"\u7b2c\u4e09\u8f66\u53a2","train_name":"888"},{"rfid_num":"3A792749","coach_name":"\u7b2c\u56db\u8f66\u53a2","train_name":"888"},{"rfid_num":"2A2B64E3","coach_name":"\u7b2c\u4e94\u8f66\u53a2","train_name":"888"},{"rfid_num":"2A2B64E3","coach_name":"\u7b2c\u516d\u8f66\u53a2","train_name":"888"}]}
這種格式不太好看,有個很好用的在線工具——Be JSON http://www.bejson.com/ 可以格式化讓它更易讀,還可以生成pojo類。
先觀察數據datas是個數組,它要有個實體類,然後還需要一個總的實體類
public class Datas {
private String rfid_num;
private String coach_name;
private String train_name;
}
public class Json {
private int status;
private String message;
private String id;
private String work_type_name;
private String task_type_name;
private String start_time;
private String end_time;
private String remark;
private List<Datas> datass ;
}
然後需要一個方法訪問URL地址返回JSON字符串
private String getContent(String url) {
StringBuilder sb = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpParams httpParams = client.getParams();
// 設置網絡超時參數
HttpConnectionParams.setConnectionTimeout(httpParams, 3000);
HttpConnectionParams.setSoTimeout(httpParams, 5000);
HttpResponse response = null;
try {
response = client.execute(new HttpPost(url));
HttpEntity entity = response.getEntity();
if (entity != null) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(
entity.getContent(), "UTF-8"), 8192);
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
現在已經得到了JSON數據,可以開始解析了。
先解析總的數據,不解析datas,一會在解析它。
JSONTokener jsonParser = new JSONTokener(body);
// 解析root
JSONObject obj = (JSONObject) jsonParser.nextValue();
json.setStatus(obj.getInt("status"));
json.setMessage(obj.getString("message"));
json.setId(obj.getString("id"));
json.setWork_type_name(obj.getString("work_type_name"));
json.setTask_type_name(obj.getString("task_type_name"));
json.setStart_time(obj.getString("start_time"));
json.setEnd_time(obj.getString("end_time"));
json.setRemark(obj.getString("remark"));
然後解析datas數組,這兩種解析不一樣,上一種第一行就是數據,這種它是數組。
Json json = new Json();
Datas datas;
//解析data
JSONArray datasObjs = new JSONObject(body).getJSONArray("datas");
List<Datas> datass = new ArrayList<>(); //這句其實沒啥用,把下面兩個for放一起就行了。
for (int i = 0; i < datasObjs.length(); i++) {
datas = new Datas();
JSONObject jsonObj = (JSONObject) datasObjs.opt(i);
datas.setRfid_num(jsonObj.getString("rfid_num"));
datas.setCoach_name(jsonObj.getString("coach_name"));
datas.setTrain_name(jsonObj.getString("train_name"));
datass.add(datas);
}
現在數據已經解析好了,放到實體類裏了,要怎麼顯示出來就很隨意了。