Android JSON解析(1)

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);
                }

現在數據已經解析好了,放到實體類裏了,要怎麼顯示出來就很隨意了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章