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

现在数据已经解析好了,放到实体类里了,要怎么显示出来就很随意了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值