fastjson和gson对json中数据类型和格式的兼容性对比
来源:互联网 发布:顶尖条码电子称软件 编辑:程序博客网 时间:2024/06/05 09:23
网上对比解析框架性能优劣的帖子一大堆,但是很少有人针对这几个框架对数据格式和类型的兼容性分析,实际开发中由于客户端和服务端协调不到位引起的这些问题还是值得注意的。
结论如下:
1.格式不对照:json支持兼容更好,部分内容格式不对照仍可以解析成功。
2.key不对照:同样支持key不对照或缺少情况
3.value类型不对照(重点):int-float都支持,float-int只有json支持,”“-float/int只有json支持,String解析为数值类型都是不支持的 Json兼容性支持更好。
4.泛型嵌套:同样支持泛型嵌套
5.内部类嵌套:同样支持内部类嵌套,但是fastjson对嵌套的内部类要求第三层内部类是静态的才可以正确解析,否则会异常如下:
com.alibaba.fastjson.JSONException: create instance error, class com.example.pcbin.myapplication.jsonvsgson.NestingBean$DataThree
,而gson没有这个要求。
总结:总的来说fastjson兼容性支持更好。改成fastjson注意排查所有三层嵌套的bean,第三层bean必须为static。
测试代码如下:
private void testJson() { Log.e("--","---------------------------格式不对照------------------------------"); String jsonStr = "{\"status\":1,\"tips\":\"操作成功\",\"data\":{}}"; String jsonError = "{\"status\":1,\"tips\":\"操作成功\",\"data\":[]}"; BaseBean resultBeanGson = new Gson().fromJson(jsonStr, BaseBean.class); Log.e("格式不对照-Gson-正确格式:",resultBeanGson.toString()); try { BaseBean resultBeanGsonStyle = new Gson().fromJson(jsonError, BaseBean.class); Log.e("格式不对照-Gson-错误格式:",resultBeanGsonStyle.toString()); }catch (Exception e){ Log.e("格式不对照-Gson-错误格式:",e.toString()); } BaseBean resultBeanJson = JSON.parseObject(jsonStr, BaseBean.class); BaseBean resultBeanJsonStyle = JSON.parseObject(jsonError, BaseBean.class); Log.e("格式不对照-JSON-正确格式:",resultBeanJson.toString()); Log.e("格式不对照-JSON-错误格式:",resultBeanJsonStyle.toString()); Log.e("--","---------------------------格式不对照22222--------------------------"); String jsonStr22 = "{\n" + " \"status\": 100000002,\n" + " \"tips\": \"データがありません\",\n" + " \"data\": {}\n" + "}"; String jsonError22 = "{\n" + " \"status\": 1,\n" + " \"tips\": \"操作成功\",\n" + " \"data\": [\n" + " {\n" + " \"iurl\": \"https://zerovideotest.oss-cn-hangzhou.aliyuncs.com/dobby/ad2.png\",\n" + " \"url\": \"http://bbs.zerotech.com/thread-1407-1-1.html\",\n" + " \"md5\": \"85ea22e4c26dfc0ef73a622e81d61ca8\",\n" + " \"lang\": \"zh-Hans\"\n" + " },\n" + " {\n" + " \"iurl\": \"https://zerovideotest.oss-cn-hangzhou.aliyuncs.com/dobby/ad3.png\",\n" + " \"url\": \"http://bbs.zerotech.com/thread-1539-1-1.html\",\n" + " \"md5\": \"58241a06cfc1c955e21e9c242d22ed27\",\n" + " \"lang\": \"zh-Hans\"\n" + " }\n" + " ]\n" + "}"; try { BaseBean2 resultBeanGson22 = new Gson().fromJson(jsonStr22, BaseBean2.class); Log.e("22格式不对照-Gson-正确格式:",resultBeanGson22.toString()); BaseBean2 resultBeanGsonStyle22 = new Gson().fromJson(jsonError22, BaseBean2.class); Log.e("22格式不对照-Gson-错误格式:",resultBeanGsonStyle22.toString()); }catch (Exception e){ Log.e("22格式不对照-Gson-错误格式:",e.toString()); } BaseBean2 resultBeanJson22 = JSON.parseObject(jsonStr22, BaseBean2.class); BaseBean2 resultBeanJsonStyle22 = JSON.parseObject(jsonError22, BaseBean2.class); Log.e("22格式不对照-JSON-正确格式:",resultBeanJson22.toString()); Log.e("22格式不对照-JSON-错误格式:",resultBeanJsonStyle22.toString()); Log.e("--","---------------------------key不对照------------------------------"); String jsonStr2 = "{\"status\":1,\"tips\":\"操作成功\",\"data\":{\"name\":\"chao\",\"age\":18}}"; String jsonError2 = "{\"status\":1,\"tips\":\"操作成功\",\"data\":{\"name\":\"chao\",\"ageError\":18}}"; UserBean resultBeanGson2 = new Gson().fromJson(jsonStr2, UserBean.class); UserBean resultBeanGsonStyle2 = new Gson().fromJson(jsonError2, UserBean.class); Log.e("key不对照-Gson-正确格式:",resultBeanGson2.toString()); Log.e("key不对照-Gson-错误格式:",resultBeanGsonStyle2.toString()); UserBean resultBeanJson2 = JSON.parseObject(jsonStr2, UserBean.class); UserBean resultBeanJsonStyle2 = JSON.parseObject(jsonError2, UserBean.class); Log.e("key不对照-JSON-正确格式:",resultBeanJson2.toString()); Log.e("key不对照-JSON-错误格式:",resultBeanJsonStyle2.toString()); Log.e("--","---------------------------value类型不对照------------------------------"); String jsonStr3 = "{\"status\":1,\"tips\":\"操作成功\",\"data\":{\"name\":18,\"age\":18.1}}"; String jsonError3 = "{\"status\":1,\"tips\":\"操作成功\",\"data\":{\"name\":18,\"age\":\"\"}}"; UserBeanType resultBeanGson3 = new Gson().fromJson(jsonStr3, UserBeanType.class); Log.e("value类型不对照-Gson-正确格式:",resultBeanGson3.toString()); try { UserBeanType resultBeanGsonStyle3 = new Gson().fromJson(jsonError3, UserBeanType.class); Log.e("value类型不对照-Gson-错误格式:",resultBeanGsonStyle3.toString()); }catch (Exception e){ Log.e("value类型不对照-Gson-错误格式:",e.toString()); } UserBeanType resultBeanJson3 = JSON.parseObject(jsonStr3, UserBeanType.class); Log.e("value类型不对照-JSON-正确格式:",resultBeanJson3.toString()); try{ UserBeanType resultBeanJsonStyle3 = JSON.parseObject(jsonError3, UserBeanType.class); Log.e("value类型不对照-JSON-错误格式:",resultBeanJsonStyle3.toString()); }catch (Exception e){ Log.e("value类型不对照-JSON-错误格式:",e.toString()); } Log.e("--","---------------------------泛型嵌套------------------------------"); String jsonStr4 = "{\"status\":1,\"tips\":\"操作成功\",\"data\":{\"name\":\"chao\",\"age\":18}}"; BaseType<DataBean> resultBeanGson4 = new Gson().fromJson(jsonStr4, new BaseType<DataBean>().getClass()); Log.e("泛型嵌套-Gson-正确格式:",resultBeanGson4.toString()); BaseType<DataBean> resultBeanJson4 = JSON.parseObject(jsonStr4, new BaseType<DataBean>().getClass()); Log.e("泛型嵌套-JSON-正确格式:",resultBeanJson4.toString()); Log.e("--","---------------------------内部类嵌套------------------------------");// String jsonStr5 = "{\"status\":1,\"tips\":\"操作成功\",\"data\":{\"name\":\"chao\",\"age\":18}}"; String jsonStr5 = "{\"status\":1,\"tips\":\"操作成功\",\"data\":{\"name\":\"chao\",\"age\":18,\"three\":{\"namethree\":\"yc\"}}}"; NestingBean resultBeanGson5 = new Gson().fromJson(jsonStr5, new NestingBean().getClass()); Log.e("内部类嵌套-Gson-正确格式:",resultBeanGson5.toString()); try { NestingBean resultBeanJson5 = JSON.parseObject(jsonStr5, new NestingBean().getClass()); Log.e("内部类嵌套-JSON-正确格式:",resultBeanJson5.toString()); }catch (Exception e){ Log.e("内部类嵌套-JSON-错误格式",e.toString()); } }
1 0
- fastjson和gson对json中数据类型和格式的兼容性对比
- Gson和Fastjson解析对比
- Json和FastJson对比
- 分别讲解gson和fastjson解析json格式
- 分别讲解gson和fastjson解析json格式
- Android JSON:Gson,FastJson解析库的使用和对比分析
- json之Gson和FastJson
- FastJSON、Gson和Jackson性能对比
- FastJSON、Gson和Jackson性能对比
- FastJSON、Gson和Jackson性能对比
- FastJSON、Gson和Jackson性能对比
- FastJSON、Gson和Jackson性能对比
- FastJSON、Gson和Jackson性能对比
- FastJSON、Gson和Jackson性能对比
- Json-lib 和 Gson的对比
- FastJson和Gson解析json的小例子
- Android常用Json解析框架GSON和FastJson的使用
- 使用Gson和FastJson解析JSON数据遇到的问题
- C# 学习过程知识点累积
- TCP/IP网络编程_计算器服务器端客户端
- Java基础再回首之设计模式系列②-----Observer 观察者模式(案列教程,附带demo)
- php 自制时间格式化
- R数据分析实例:稳健回归
- fastjson和gson对json中数据类型和格式的兼容性对比
- linux uart编程
- android studio解决warning: Ignoring InnerClasses attribute for an anonymous inner class
- String类split方法的使用(字符串以'.'分隔得不到任何内容)
- <LeetCode>115.Distinct Subsequences 求相同子序列数 Tag:DP, string
- HDU 1875 畅通工程再续——最小生成树
- java.lang.IllegalStateException: No output folder
- matlab查找集合中某个元素的位置/Struct结构体某个字段值的位置
- POJ3579--Median(二分)