Json
什么是json
- JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
- JSON 是轻量级的文本数据交换格式
- JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
- JSON 具有自我描述性,更易理解
为什么使用 JSON?
对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:
使用 XML
- 读取 XML 文档
- 使用 XML DOM 来循环遍历文档
- 读取值并存储在变量中
使用 JSON
- 读取 JSON 字符串
- 用 eval() 处理 JSON 字符串
Json数组格式
Json的数据本身是数组,中括号包裹,数组的元素之间逗号分开.数组元素的数据类型没有限制.
var jsonArray = ["元素1","元素2","元素3"]; //定义数组格式json
console.log(jsonArray[0]); //访问json数组的元素
for(var i = 0 ; i < jsonArray.length ; i++){
console.log(jsonArray[i]); //遍历数组,访问每个元素
}
Json对象格式
Json的数据本身是对象,大括号包裹.对象采用键值对形式存储,键固定为字符串类型,值是任意类型的数据.键和值使用冒号分开.
var jsonObject = {"k1":"v1","k2":"v2","k3":"v3"}; //定义对象格式json
console.log(jsonObject.k1); //取出键k1对应的值
数组对象相互嵌套格式
数组中的元素是对象
var jsonArray = [
{"k1":"v1"},{"k2":"v2"}
]; // 定义数组格式json,数组元素是对象
console.log(jsonArray[0].k1); //访问数组0索引的元素,该元素的键k1对应的值
对象中的值是数组
var jsonObject = {
"k1":["元素1","元素2"],
"k2":["元素1","元素2"]
}; // 定义对象格式json,键是字符串类型,值是数组
console.log(jsonObject.k1[0]); //访问对象的键是k1,对于的值为数组,数组的0索引元素
你中有我,我中有你
var json = {
"k1":[
"元素1",{"key1":"value1"},{"key2":"value2"}
],
"k2":[
{"key1":"value1"}
]
}; //定义对象格式json,键是字符串,值是数组,数组的元素是对象
console.log(json.k1[1].key1); //访问json对象的键k1,对应的是数组,访问数组的1索引,数组的1索引上的元素是对象,访问key1键对应的值
JSON.parse()
JSON 通常用于与服务端交换数据。
在接收服务器数据时一般是字符串。
我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象。
语法
JSON.parse(text[, reviver])
参数说明:
- **text:**必需, 一个有效的 JSON 字符串。
- reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。
JSON.stringify()
JSON 通常用于与服务端交换数据。
在向服务器发送数据时一般是字符串。
我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串。
语法
JSON.stringify(value[, replacer[, space]])
参数说明:
-
value:
必需, 要转换的 JavaScript 值(通常为对象或数组)。
-
replacer:
可选。用于转换结果的函数或数组。
如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:“”。
如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当 value 参数也为数组时,将忽略 replacer 数组。
-
space:
可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t。
把 JSON 文本转换为 JavaScript 对象
由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。
eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:
GET请求和POST请求
GET请求
- 数据传输方式:GET请求的数据通过URL传递,即在URL后面添加查询参数。
- 数据量限制:由于URL长度有限制,GET请求传递的数据量通常较小。
- 安全性:GET请求的数据会显示在浏览器地址栏中,因此不适合传输敏感信息。
- 幂等性:GET请求具有幂等性,即多次执行相同的GET请求,结果是一致的。
- 缓存:GET请求可以被浏览器缓存,对于相同的请求,浏览器会直接从缓存中获取数据。
POST请求介绍
- 数据传输方式:POST请求的数据通过HTTP请求体传递,而不是作为URL的一部分。
- 数据量:POST请求对传递的数据量没有严格限制,可以发送大量数据。
- 安全性:POST请求的数据不会显示在浏览器地址栏中,相对更安全,但同样需要注意对数据的加密和保护。
- 幂等性:POST请求通常不具有幂等性,即多次执行相同的POST请求可能会导致不同的结果。
- 缓存:POST请求不会被浏览器缓存。
GET请求和POST请求的区别
- 数据传输方式和数据量:GET请求通过URL传递数据,数据量较小;POST请求通过HTTP请求体传递数据,数据量较大。
- 安全性:GET请求的数据会暴露在URL中,安全性较低;POST请求的数据不会显示在URL中,相对更安全。
- 幂等性:GET请求具有幂等性,POST请求通常不具有幂等性。
- 缓存:GET请求可以被浏览器缓存,POST请求不会被缓存。
如何选择GET请求和POST请求
- 根据数据量选择:如果需要传输的数据量较小,可以选择GET请求;如果需要传输大量数据,应选择POST请求。
- 根据安全性需求选择:如果传输的数据不敏感或可以公开,可以选择GET请求;如果传输的数据敏感或需要保密,应选择POST请求。
- 根据操作类型选择:GET请求适用于获取数据或进行查询操作;POST请求适用于提交数据或执行具有副作用的操作(如修改数据、添加记录等)。
前后端 API 规范
前后端API规范主要涉及API的设计、请求和响应格式、状态码、URL格式、参数使用等方面,以确保前后端之间的通信顺畅、数据交换准确。
一、API设计
- 资源定义:明确定义API所提供的资源,如用户、订单、商品等。每个资源应有唯一的标识,如ID或UUID。
- URI设计:URI应简洁明了,易于理解和记忆。推荐使用RESTful风格的URI,使用动词+名词的形式表示操作和资源,如
/users
表示用户资源,/users/{id}
表示特定用户。 - HTTP方法:根据操作类型选择合适的HTTP方法,如GET用于获取数据,POST用于创建数据,PUT用于更新数据,DELETE用于删除数据。
二、请求与响应格式
- 请求格式:API的请求格式应为标准的JSON格式。请求体中包含所需的数据和参数,参数名应使用驼峰命名法或下划线命名法,并保持一致性。
- 响应格式:API的响应结果也应为标准的JSON格式。响应体中包含返回的数据和状态信息,如状态码、消息、数据等。
三、状态码
API的响应应包含HTTP状态码,以表示请求的处理结果。常用的状态码包括:
- 200 OK:请求成功。
- 400 Bad Request:请求有误,如参数错误或格式不正确。
- 401 Unauthorized:未授权,如未提供有效的认证信息。
- 404 Not Found:请求的资源不存在。
四、URL格式
API的URL应具有可读性,结构清晰,有助于URL的自我说明。避免使用过长或复杂的URL,尽量保持简洁。同时,URL中的参数应遵循一定的命名规范,如使用下划线连接单词。
五、参数使用
- 参数命名:参数命名应清晰明了,具有描述性。推荐使用驼峰命名法或下划线命名法,并保持一致性。
- 参数类型:明确参数的数据类型和格式,如字符串、数字、布尔值等。对于复杂的参数结构,如嵌套对象或数组,应提供详细的说明和示例。
- 参数必填性:明确指出哪些参数是必填的,哪些是可选的。对于必填参数,如未提供或格式不正确,应返回相应的错误提示。
六、版本控制
随着业务的发展和需求的变化,API可能会进行迭代和更新。因此,建议使用版本控制机制来管理API的版本。通过在URL中添加版本号(如/v1/users
)或使用请求头中的特定字段来指定版本,可以确保客户端能够正确调用对应版本的API。