那些年遇到的后台返回的奇葩json数据

4.这个还看得过去,至少有个json数据返回。

然而:你给我返回的null什么意思。。。还不如不返回。。。这样设计有啥意义。。

{
“data”:“null”
}

5.比上面那个更可恶,有错误数据返回,有错误信息描述。

然而:错误数据返回null不说,错误信息居然返回一个一个url?就这么一点错误信息,还要我再去请求一次服务器获取这个错误信息吗。。 服务器流量不要钱的吧。。。经得起这样折腾?后台哥们啊,走点心吧!为老板省点流量钱吧,同时也要提高用户体验啊!用户请求网络的流量也不能由你这样去折腾。。

{
“data”:“null”,
“desc”:“/error/desc”
}

6. 返回url就算了,为什么加一个/转义字符?

{
“error”:“//error_desc”
}

7. 返回url就算了,居然还有返回中文的,用的是unicode转换的?我用的时候要把它转换回来。。很麻烦。。

{
“error”:“/%2F%E9%94%99%E8%AF%AF%E4%BF%A1%E6%81%AF”
}

8. 返回的图片不是url,而是base64编码,我还要去用base64编码去处理。你是在逗我吗?让我看天文数字,给个url很难吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

9. 还有的是全部是拼音的

{
“cuowuma”: 1,
“cuowuxinxi”:“请求失败”
}

10. 返回的json里面某些字段是java的关键字

问题:json里面某些字段是java的关键字,转成实体类的时候,会报错。

{
“abstract”: “Success”,
“id”: “503”,
“package”: “50”
}

转成实体类如下,会报错:

public class ResultEntity {
private String abstract;
private String id;
private String package;
//…get set方法省略
}

  • 对老司机来说,这种小问题当然也是有解决办法的。使用google提供的序列化工具,按下面这样写,就可以正常的将数据反射到字段中了。

public class ResultEntity {
@SerializedName(“abstract”)
private String successInfo;
private String id;
@SerializedName(“package”)
private String packageNumber;
//…get set方法省略
}

  • tips:按java编程规范来说,接口中是不能包含java关键字的。所以 奉劝各位后台新手不要心存侥幸心理,一切都要按规范来做,这样对你今后的开发会有很多帮助。

11. 返回的相同字段用的不同的数据类型,这个是最苦逼的,解析都不好处理。

比如下面这个,id字段,前面的是数字类型(我们这边暂定为int类型),最后一个是String类型,后台说是GUID,不管它是什么鬼,看到这种只想打人。万一哪天服务器把id都改成int类型了,客户端这边的代码中涉及到这个id字段的所有地方都要跟着改动,这不是坑爹吗。。。

[
{
“id”: “503”,
“name”: “License”,
“picture”: “/userfiles/upload/2017/503.png”
},
{
“id”: “504”,
“name”: “其它”,
“picture”: “/userfiles/upload/2017/504.png”
},
{
“id”: “80896a88d8c3449bb90c4781ddbd4d49”,
“name”: “TH inkaNet”,
“picture”: “/userfiles/upload/2017/81211f2db0c649318e7166e447e91186.jpg”
}
]

12. 多层嵌套的json,在中间的某一层后台返回的是null,这种情况解析起来很麻烦的。

正确做法:不管有没有数据返回,都要写清楚返回字段。

举例说明:

{
“data”: [
{
“id”: “101”,
“info”: [
{
“name”: “张1”,
“code”: “10101”
},
{
“name”: “张2”,
“code”: “10102”
},
{
“name”: “张3”,
“code”: “10103”
}
]
},
{
“id”: “102”,
“info”: [
{
“name”: “张4”,
“code”: “10201”
},
{
“name”: “张5”,
“code”: “10202”
},
{
“name”: “张6”,
“code”: null
}
]
},
{
“id”: “104”,
“info”:null
}
]
}

13. 有数据的时候返回的类型不统一,有数据的时候返回的是json array类型,没有数据返回的时候成了json object类型。

比如我遇到过的后台返回的数据举例如下:

有数据返回的时候:

{
“id”: “102”,
“info”: [
{
“name”: “张4”,
“code”: “10201”
},
{
“name”: “张5”,
“code”: “10202”
},
{
“name”: “张6”,
“code”: null
}
]
}

没有数据返回的时候,info这个json array类型怎么就变成了json object类型?莫名其妙:

{

结语

由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!以下是目录截图:

由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。

再附一部分Android架构面试视频讲解:


《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。

再附一部分Android架构面试视频讲解:

[外链图片转存中…(img-mENEGDdR-1715418825349)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值