1、问题背景
1.解析下面json
{"result":[{"adcd":"17032811121000001","adNm":"奎屯市","countYesd":11.0,"engManCd":"北京奥特美克","estStYm":"2017-06-04 14:22:47","lgtd":11.10000000,"loc":"北京奥特美克","lttd":11.10000000,"stcd":"1111111","stNm":"测试雨量站1","ts":"2017-05-31 14:37:10"},{"adcd":"17032811121000008","adNm":"兵团一三一团","countYesd":22.0,"engManCd":"北京市海淀区","estStYm":"2017-06-02 14:58:44","lgtd":22.00000000,"loc":"北京海淀","lttd":22.00000000,"stcd":"222","stNm":"测试雨量站2","ts":"2017-06-02 14:59:17"},{"adcd":"17032811121000001","adNm":"奎屯市","countYesd":null,"engManCd":"奎屯","estStYm":"2017-06-02 14:58:44","lgtd":84.78595732,"loc":"奎屯","lttd":44.31918123,"stcd":"20105061","stNm":"奎屯河水管站","ts":null},{"adcd":"17032811121000001","adNm":"奎屯市","countYesd":null,"engManCd":"奎屯","estStYm":"2017-06-02 14:58:44","lgtd":84.90324497,"loc":"奎屯","lttd":44.42627155,"stcd":"20105065","stNm":"奎屯市政府","ts":null}],"code":1}
2.分析
本来想用gson来解析,但是总是异常,而且当时我以为是网络问题,因为网络框架的onerror爆错了,后来发现,onsuccess也触发了,后来发现onsuccess中解析错误,才导致了,onerror;
java bean为 HydrologyRainStation
private String stcd;//测站编码
private String stNm;//测站名称
private String engManCd;//管理单位
private String loc;//所在地(地址)
private String estStYm;//设站年月
private String adcd;//行政区编码
private String adNm;//行政区名称
private String ts;//监测时间
private Double lgtd;//测站经度
private Double lttd;//测站纬度
private String countYesd;//**原来为Float格式**
3.下面是用gson解析的代码
Gson gson = new Gson();
String data = json.getString("result");
mList.clear();
try {
mList = gson.fromJson(data, new TypeToken<List<HydrologyRainStation>>(){}.getType());
} catch (Exception e) {
LogUtils.e("st","result转bean解析有问题"+e);
e.printStackTrace();
}
4.用JSONArray来解析
下面注释的代码
JSONArray jsonA=json.getJSONArray("result");
for (int i=0;i<jsonA.length();i++){
HydrologyRainStation hrs=new HydrologyRainStation();
JSONObject jsonR= jsonA.getJSONObject(i);
hrs.setAdNm(jsonR.getString("adNm"));
hrs.setAdcd(jsonR.getString("adcd"));
hrs.setEngManCd(jsonR.getString("engManCd"));
hrs.setEstStYm(jsonR.getString("estStYm"));
hrs.setLoc(jsonR.getString("loc"));
hrs.setLgtd(jsonR.getDouble("lgtd"));
hrs.setLttd(jsonR.getDouble("lttd"));
hrs.setCountYesd(String.valueOf(jsonR.get("countYesd")));
hrs.setTs(jsonR.getString("ts"));
hrs.setStNm(jsonR.getString("stNm"));
hrs.setStcd(jsonR.getString("stcd"));
mList.add(hrs);
LogUtils.e("sjt", "size数据为" + mList.size());
}
hrs.setCountYesd(String.valueOf(jsonR.get(“countYesd”)));原来
写的,getDouble…想用double转float,疯了
而,没有getFloat,为何
见:JSON巧遇Float,请注意转向
5.发现都有错
关键是result 里有一个值为float
而,javabean里也写的float,Float写string解决