当我刚接触Android的时候,还很稚嫩,社交经验也几乎为零,还是前辈们说啥我干啥,所以跟着前辈们用JSONObject。想必有一些后起之秀应该都没用过,因为大部分都是沉浸在使用第三方无法自拔,的确第三方极大的减少我们的开发时间,也省去改bug的时间。但是倔强的我个人还是认为,会创造比会用更好,当然我也是个菜鸟创造不出什么花儿来,但我的项目坚持能不用第三方就不用,这是题外话,哈哈。

转载注明出处,CSDN第四篇

现在的时间是11月底,如果我数学马马虎虎就应该说这是本月最后一个周末了。我也来新公司算是一个月了,关于老项目的优化也接近瓶颈(本来想说尾声的…),为啥说是瓶颈呢,应该是我能优化的都优化了,如果还有没优化的那就是我还没发现。
话锋一转,下面说一下关于json的处理。

用JSONObject处理json数据

 @Override    public void onSuccess(String result) {try {            JSONObject object=new JSONObject(result);            String name=object.getString("name");            int age=object.getInt("age");            boolean status=object.getBoolean("status");            JSONArray data=object.getJSONArray("data");            JSONObject item=data.getJSONObject(0);        } catch (JSONException e) {            e.printStackTrace();        }    }

这就是我最早时候接触的处理数据,说实话也没什么不好,用的时候再取就好了,而且String和JSONObejct互转也很方便,传递数据的时候,直接换成String类型的json传。

用Gson处理json数据

这个就比较常见了,自从我用了之后几乎几年都没换过,唯一的缺点就是数据和bean必须一模一样,否则报错。随着时代的发展,越来越不适应了。

 @Override    public void onSuccess(String result) {Gson gson = new Gson();Bean bean = gson.fromJson(result, Bean.class);ArrayList<Bean> list = gson.fromJson(gsonString, new TypeToken<ArrayList<Bean>>() {}.getType());Map<String, Bean> map = gson.fromJson(gsonString, new TypeToken<Map<String, Bean>>() {}.getType());    }

上面代码可以看出转成list和map的时候也略微复杂。

用FastJson处理json数据

 @Override    public void onSuccess(String result) {Bean bean = JSON.parseObject(result, Bean .class);JSONArray array = JSON.parseArray(result);List<Bean> beans= JSON.parseArray(result, Bean.class);List<Bean > listMap = JSON.parseObject(result,new TypeReference<List<Bean >(){});List<Map<String,Bean>> listMap = JSON.parseObject(result,new TypeReference<List<Map<String,Bean>>(){});Map<String,Bean> map = JSON.parseObject(result,new TypeReference<Map<String,Bean>(){});    }

可以看出fastJson转换的时候要方便的多,并且速度特别快。当然也有缺点就是出bug比较多,具体什么bug我没遇到过,只是测试了一下用法。

用Jackson处理json数据

 @Override    public void onSuccess(String result) {    ObjectMapper objectMapper = new ObjectMapper();Bean bean = objectMapper.readValue(result, Bean .class);List<Bean> beans= JSON.parseArray(result, new TypeReference<List<Bean>>() {});Map<String,Bean> map = objectMapper.readValue(result, Map.class);    }

小结

总体来说大同小异,国外比较喜欢用Jackson,国内比较推荐FastJson,而用的比较多的是Gson。但是我在这里反而要推荐返璞归真,使用JSONObject,这是为什么呢?
首先省去实体类的代码量,其次省去bean和数据不对应取不出数据的问题,即使后台加一个参数,我们解析依然不报错,有很大的健壮性。

//此处封装在请求网络接口之后 @Override    public void onResponse(final Response response, callback) {    try {            sendSuccessResultCallback(response.request(), response.body().string(), callback);        } catch (IOException e) {            sendFailedStringCallback(response.request(), e, callback);        }    }    private void sendSuccessResultCallback(final Request request, final String response, final ResultCallback callback) {    int code;    String result= "";    JSONObject o = null;        JSONArray a = null;        try {             JSONObject json = new JSONObject(response);             code = json.optInt("code");             msg = json.optString("message");             result= json.optString("body");             if (!TextUtils.isEmpty(data)) {                 Object object = new JSONTokener(data).nextValue();             if (object instanceof JSONObject) {                 JSONObject obj = (JSONObject) object;                 o = obj;             } else if (object instanceof JSONArray) {                 JSONArray array = (JSONArray) object;                 a = array;             }          }           } catch (JSONException e) {           }           if (o == null) {              o = new JSONObject();           }           if (a == null) {              a = new JSONArray();           }           callback.onSuccess(code,result, o, a);    } @Override    public void onSuccess(int code,String result, JSONObject object, JSONArray array) {      //注意这里的object和array都不会为空,如果后台数据是{}就直接用object,如果是[]就用array      String name=object.optString("name");          int age=object.optInt("age");          boolean status=object.optBoolean("status");          //上面使用opt去取值,如果没有也会默认为0,"",false等,不会报错          JSONArray data=object.optJSONArray("data");          if (data== null) {              data = new JSONArray();           }          JSONObject item=data.optJSONObject(0);          if (item== null) {              item= new JSONObject();          }          //这里会为空所以直接新建一个空数据    }

总结

其实我有点标题党,因为我主要是宣传JSONObject的用法,哈哈。
当然如果我下一次用,我会选择Jackson,比Gson快,比FastJson稳定,比JSONObject简洁。

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. 浅析android适配器adapter中的那些坑
  4. Flutter学习六之实现一个带筛选的列表页面
  5. android不在坑系列一:数据库框架的选择
  6. Android(安卓)UI绘制优化及建议
  7. 针对 android端模拟教务系统登陆,主要针对抓包过程,post,get请求,和
  8. Android利用LocalSocket实现Java端进程与C端进程之间的IPC
  9. 关于Volley的问题,GET方式下输入有空格的参数居然解析错误,导致不

随机推荐

  1. 软键盘显示及属性android:windowSoftInpu
  2. Android 统计图表引擎 AChartEngine (一)
  3. Android个层次调用流程概述
  4. 【Flutter】修改图标、应用名称、包名等
  5. Android MVP 架构介绍
  6. Android Studio使用手册
  7. Android——Broadcast Receiver(广播接收
  8. Android中引入开源库(Eclipse与Android St
  9. Android设置Settings:ListPreference【3】
  10. 【漫漫安卓路之承】android tips