最近随着前后端分离的流行,RESTful API 被越来越广泛地应用。在处理 AJAX 请求时,API 响应格式通常采用 JSON 格式,但是在实际开发中,我们需要面对多种复杂的数据结构和类型,因此 JSON 转换规范显得尤为重要。本文将为大家介绍在 RESTful API 中的 JSON 转换规范及其应用。
一、JSON 介绍
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。JSON 采用键值对的方式来表示对象,使用大括号 {}
包裹,键和值之间用冒号 :
分隔,多个键值对之间用逗号 ,
分隔。如下所示:
-- -------------------- ---- ------- - ------- ----- ------ --- ------------ ----- --------- - -------- ---- ----------- ---- ----------- --- - -展开代码
其中 name
、age
、isStudent
是基本数据类型,scores
是一个数组,其中每个元素又是一个对象,表示小明的各科成绩。
二、JSON 转换规范
在 RESTful API 中,我们需要遵循一定的 JSON 转换规范,以便前后端之间进行数据交换时能够正确解析和使用数据。
1. 对象(Object)
对象是 JSON 中的基本数据类型之一,表示一个包含多个键值对的集合。在 RESTful API 中,通常使用对象来表示一个实体的属性及其对应的值。
① 键值对格式
键值对分别用双引号包裹,如 {"name": "小明"}
,中间用冒号 :
连接,多个键值对之间用逗号 ,
分隔。如下所示:
{ "name": "小明", "age": 18, "isStudent": true }
② 空对象
空对象不包含任何成员,表示一个进程或系统内部的状态。在 JSON 中表示为 {}
。
{}
③ 属性顺序
虽然在 JSON 规范中是没有强制要求各属性的顺序的,但是为了使其可读性更好,我们需在 JSON 对象中严格要求属性顺序,即按照一定的规范按字母或业务先后顺序排列。
2. 数组(Array)
数组是 JSON 中的另一种基本数据类型,表示一个有序的元素集合。在 RESTful API 中,通常使用数组来表示一组相同类型的实体、多个实体的属性等集合类数据。
① 空数组
空数组不包含任何元素,表示一个进程或系统内部的状态。在 JSON 中表示为 []
。
[]
② 一般数组格式
数组里面的元素可以是任意类型,数组中的所有元素可以是同一类型或混合类型。如下所示:
[ "苹果", "梨子", "香蕉", {"name": "桂林米粉", "price": 15}, ["红烧肉", "饺子", {"name": "狮子头", "price": 20}] ]
在 RESTful API 中,一般数组中的元素数量不应过多,以免导致数据传输量过大。
③ 对象数组格式
对象数组表示包含多个相同结构的对象的集合,每个对象都有相同的键和键值对。如下所示:
[ {"name": "小明", "age": 18, "isStudent": true}, {"name": "小红", "age": 19, "isStudent": true}, {"name": "张三", "age": 20, "isStudent": false} ]
3. 字符串(String)
字符串是 JSON 中常用的数据类型之一,表示一个文本串。在 RESTful API 中通常用来表示实体属性的值。
① 中文字符
为了避免中文字符在转码过程中出现乱码现象,一般建议在 JSON 中使用 Unicode 码表示中文字符,例如中文字符 "好好学习" 可表示为 "\u597d\u597d\u5b66\u4e60"。
{ "name": "\u5c0f\u660e", "description": "\u597d\u597d\u5b66\u4e60" }
② HTML 转义字符
在 RESTful API 中,如果字符串值中包含 HTML 转义字符(如 <
、>
、&
、'
、"
等),需要将其转换为对应的字符码。例如 Hello, <world>
需要转换为 Hello, <world>
。
{ "description": "Hello, <world>" }
4. 数值类型(Number)
数值类型是 JSON 中的基本数据类型之一,表示一个数字。在 RESTful API 中通常用来表示实体的数值属性。
{ "age": 18, "score": 90.5 }
5. 布尔类型(Boolean)
布尔类型是 JSON 中的一种基本数据类型,只有两个值:true
和 false
。在 RESTful API 中通常用来表示实体属性的状态。
{ "isStudent": true, "isPass": false }
三、JSON 应用实例
1. 静态 JSON 示例
下面是一个静态的 JSON 示例,展示了一个公司的基本信息。
-- -------------------- ---- ------- - ------- ---- ---- -------------- ------------- ---------- --------- ---------- --------- ------------ - -------- ----- ------ --- ----------- ------- -------- ----- ------ --- ----------- ------- -------- ----- ------ --- ----------- ------ - -展开代码
2. 动态 JSON 示例
下面是一个动态的 JSON 示例,展示了一个异步加载的留言板数据。
请求 URL: /messages
请求方法: GET
请求参数:
参数名 | 类型 | 说明 |
---|---|---|
page | int | 分页页码 |
响应参数:
参数名 | 类型 | 说明 |
---|---|---|
total | int | 留言总数 |
pageSize | int | 每页大小 |
page | int | 当前页码 |
messages | object | 留言数据 |
响应示例:
-- -------------------- ---- ------- - -------- ---- ----------- --- ------- -- ----------- - ------ -- ---------- -------- ----------- ------ ------ -- ---------- -------- ----------- ------ ------ -- ---------- ---------- ----------- ----- ----- - -展开代码
四、JSON 转换工具
在开发中,为了提高开发效率,我们通常会使用 JSON 转换工具来生成或解析 JSON 格式数据。例如在 JavaScript 中,我们可以使用 JSON.stringify()
将对象转换为 JSON 格式字符串,使用 JSON.parse()
将 JSON 格式字符串转换为对象。使用工具可以大大简化开发流程,提高开发效率,减少低级错误。但是在使用转换工具时也需要注意一些细节,如属性顺序、数据类型等,以免出现不必要的问题。
五、结语
JSON 是前端开发不可或缺的一部分,良好的 JSON 实践和规范有助于保证前后端之间的数据交互准确无误。在实际开发中,我们需要时刻遵循 JSON 转换规范,并在开发中灵活使用 JSON 转换工具。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c700a5cc0f7239cde868e3