HR's Blog

Swimming 🏊 in the sea🌊of code!

0%

JSON

.

因为PHP后端传送过来的接口并没有按照严格的Swagger文档来传值,所以最近对后台制定了相关的JSON规范。良好的规范有助于前端解码JSON,用Swift自带的Codable协议来解码JSON。

关于数据传输的JSON规范

JSON中允许的值类型

值传递的类型,应该严格按照接口文档定义的类型来返回,不能全部都返回String类型。

  • 数字(整数或浮点型)
  • 字符串(在双引号中)
  • 逻辑值 (true或false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null

示例

1
2
3
4
5
6
7
8
9
{
"members":
[
{ "firstName":"John","lastName":"Doe",vip:true, age:23, balance: 23.00, profile_image:"http://www.website.com/1.jpg"},
{ "firstName":"Anna","lastName":"Smith",vip:false, age:33, balance: 3.5, profile_image:null},
{ "firstName":"Peter","lastName":"Jones",vip:false, age:23, balance: 23.1, profile_image:null}
]
"total":3
}

关于处理空值的情况

空值的相关情况

示例一

请求的列表,数组为空

1
2
3
4
5
6
7
"stats": 1
"msg":"错误信息"
"data":
{
"lists":[],
"total":0
}

示例二

存在两个值,另外一个值在特定的情况下才会有。例如价格存在price1用户提交的价格和price2议价后的价格。那么如果没有议价price2应该null

1
2
3
4
5
6
7
8
9
{
"price1":1.20,
"price2":null
}
//议价后
{
"price1":1.20,
"price2":3.50
}

空值的相关解释

{}
这个返回一个空的对象,你所找的该对象中的任何键值都是没有定义的。


{"myCount": null}
返回一个的对象,定义了myCount的键值,但是这个值是空的。


{"myCount": 0}
这里myCount的值是Int的0,和null不同,也不是布尔的false


{"myString": ""}
对象里定义了myString,但是值是空的字符串。


{"myString": "null"}
对象定义了myString,但是包含一个内容是null的字符串


{"myArray": []}
对象定义了myArray但是值是空的数组。

相关文档

Representing null in JSON
各语言的JSON解码器