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);
}
现在数据已经解析好了,放到实体类里了,要怎么显示出来就很随意了。