以前有一个非常好的解析工具我不用,直到我用了,我才追悔莫及,还是太年轻啊!好进入正题
大家都知道json解析,一般的工具有 Gson ,Fastjson,然而我却没有用它们,现在想想真是后悔啊,以前写了多少那种二B代码
public static ArrayList<Company> getCompany(String urlPath)
throws Exception {
ArrayList<Company> companiesList = null;
String data = getJsonData(urlPath);
if (data == "[]") {
return companiesList;
}
JSONObject json = new JSONObject(data);
JSONArray ja = new JSONArray(json.getString("list"));
if (ja.length() > 0) {
for (int i = 0; i < ja.length(); i++) {
companiesList = companiesList == null ? new ArrayList<Company>()
: companiesList;
JSONObject jo = ja.getJSONObject(i);
Company company = new Company();
company.setUnitName(getValue(jo, "UNIT_NAME"));
company.setUnitID(getValue(jo, "SYS_ID"));
company.setUnitCode(getValue(jo, "UNIT_CODE"));
company.setAddress(getValue(jo, "ADDR"));
company.setTelephone(getValue(jo, "PHONE"));
company.setLegalRepresentative(getValue(jo, "CORR_NAME"));
company.setUnitDevicesNum(getValue(jo, "equitmentcount"));
companiesList.add(company);
}
companiesList.get(0).setSun(json.getString("count"));
return companiesList;
} else {
return companiesList;
}
}
这个只是我项目里面一点的二B代码,真要算起来,呵呵回绕地球0.1圈,不过还好研究了一下gson解析,简直唉!后悔啊!
不多说代码等会上传上去贴一下代码:
这个是json地址: http://apicloud.mob.com/v1/weather/query?key=1149cdb17daeb&city=深圳
然后通过分析json数据的格式我分别写了三个实体类以下 get set方法省略 ,大家自己一定要补上啊
public class User {
private String msg;
private String retCode ;
private List<Result> result=new ArrayList<>();
public class Result {
private String airCondition;//良,
private String city;//深圳,
private String coldIndex;//低发期,
private String date;//2016-08-30,
private String distrct;//深圳,
private String dressingIndex;//薄短袖类,
private String exerciseIndex;//不适宜,
private String humidity;// 湿度:61%,
private String pollutionIndex;// 79,
private String province;// 广东,
private String sunrise;// 06;//06,
private String sunset;// 18;//42,
private String temperature;// 30℃,
private String time;// 14;//53,
private String updateTime;// 20160830150519,
private String washIndex;// 不适宜,
private String weather;// 多云,
private String week;// 周二,
private String wind;// 西北风3级
private List<Future> future;
public class Future {
private String date;// 2016-08-30,
private String dayTime;// 多云,
private String night;// 多云,
private String temperature;// 30°C / 25°C,
private String week;// 今天,
private String wind;// 无持续风向 小于3级
这里就把json格式里面对应的字段全部都生成了,一定要注意解析的json字段要和实体一模一样!!!
这里我们来解Json:
private List<Result> results = new ArrayList<>();
private List<Future> futures = new ArrayList<>();
private void GsonText(String json) {
Gson gson = new Gson();
User user = gson.fromJson(json, User.class);
Log.i("msgs", user.getMsg() + "" + user.getRetCode() + user.getResult());
results = user.getResult();
for (int i = 0; i < results.size(); i++) {
Log.i("msgs", results.get(i).getAirCondition());
Log.i("msgs", results.get(i).getAirCondition());//良,
Log.i("msgs", results.get(i).getCity());//深圳,
Log.i("msgs", results.get(i).getColdIndex());//低发期,
Log.i("msgs", results.get(i).getDate());//2016-08-30,
Log.i("msgs", results.get(i).getDistrct());//深圳,
Log.i("msgs", results.get(i).getDressingIndex());//薄短袖类,
Log.i("msgs", results.get(i).getExerciseIndex());//不适宜,
Log.i("msgs", results.get(i).getHumidity());// 湿度:61%,
Log.i("msgs", results.get(i).getPollutionIndex());// 79,
Log.i("msgs", results.get(i).getProvince());// 广东,
Log.i("msgs", results.get(i).getSunrise());// 06());//06,
Log.i("msgs", results.get(i).getSunset());// 18());//42,
Log.i("msgs", results.get(i).getTemperature());// 30℃,
Log.i("msgs", results.get(i).getTime());// 14());//53,
Log.i("msgs", results.get(i).getUpdateTime());// 20160830150519,
Log.i("msgs", results.get(i).getWashIndex());// 不适宜,
Log.i("msgs", results.get(i).getWeather());// 多云,
Log.i("msgs", results.get(i).getWeek());// 周二,
Log.i("msgs", results.get(i).getWind());// 西北风3级
}
futures=results.get(0).getFuture();
for (int i = 0; i <futures.size() ; i++) {
Log.i("msgs", futures.get(i).getDate());// 西北风3级
Log.i("msgs", futures.get(i).getDayTime());// 西北风3级
Log.i("msgs", futures.get(i).getNight());// 西北风3级
Log.i("msgs", futures.get(i).getTemperature());// 西北风3级
Log.i("msgs", futures.get(i).getWeek());// 西北风3级
Log.i("msgs", futures.get(i).getWind());// 西北风3级
}
在这里我自己打印了一下可以看到,呵呵,数据全部都出来了这里我们看到很少的代码就把数据解析出来了,以前觉得android api自带的json解析就可以了,现在看看自己确实lol!
当然这里附上一个解析Json数据的时间的一篇文章:http://www.android100.org/html/201506/28/159434.html
确实gson解析的速度的确要快一点,不要小看这么一点,因为应用的性能就是这样提上来的。