❝「古之立大事者,不惟有超世之才,亦必有坚忍不拔之志」——苏轼
❞
写在前面
JSON 主要用于客户端与服务器端的数据交换,其与任何一种编程语言都没有关系,可以支持任何语言,原生支持 JavaScript 语言。
JSON 概述
JSON 是什么
JSON 是 JavaScript Object Notation 的缩写,是一种轻量级的数据交换格式。它基于 ECMAScript 的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON 语法规则
JSON 格式的构建比较简单,主要为两种结构:
- “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,他被理解为对象(object), 记录(record), 结构(struct), 字典(dictionary), 哈希表(hash table), 有键列表(keyed list), 或者关联数组(associative array)。
- 值的有序列集合(An ordered list of values)。在大部分语言中,他被理解为数组(array)。
JSON 格式中作为值的类型允许是字符串(string)、数值(number)、true、false、null、对象(object)或者数组(array)
JSON 中的键值对集合
JSON 格式中的 “名称/值” 对的集合是一个无序的 “名称/值” 对集合。一个对象以左花括号 { 开头,以右花括号 } 结尾。每个 “名称” 后跟一个冒号 : ; “名称/值” 对之间使用逗号 , 分隔。
示例结构如下所示
{
"name1":"value1",
"name2":"value2",
"name3":"value3"
}
❝值得注意的是:JSON 的字符串必须是使用「双引号」包裹。
❞
JSON 中的值的有序列表
JSON 中的值的有序列表是值的有序集合。一个数组以左中括号 [ 开始,以右中括号 ] 结束。值之间使用逗号 , 分隔。
示例结构如下所示:
[ { "name1":"value1", "name2":"value2", "name3":"value3" }, { "name1":"value1", "name2":"value2", "name3":"value3" }, { "name1":"value1", "name2":"value2", "name3":"value3" }]
JSON 文件
JSON 具有独立的文件,扩展名为 .json。该文件中允许保存 JSON 格式的数据。该数据格式支持嵌套。
JavaScript 中的 JSON
JavaScript 与 JSON
JSON 是一种语法,用来序列化对象、数组、数值、字符串、布尔值和 null 。它基于 JavaScript 语法,但与之不同:JavaScript 不是 JSON ,JSON 也不是 JavaScript。
| JavaScript 类型 | JSON 的不同点 |
|---|---|
| 对象和数组 | 属性名称必须是双引号括起来的字符串;最后一个属性后不能有逗号 |
| 数值 | 禁止出现前导零 |
| 字符串 | 只有有限的一些字符可能被转义 |
JSON 字符串与 JSON 对象
「JSON 字符串」就是指在 JavaScript 语言中内容格式符合 JSON 格式的字符串类型的数据。
示例代码如下所示:
var jsonString = '{"姓名":"白月初","obj":"最强红线仙"}'
「JSON 对象」就是指 JSON 格式在 JavaScript 语言汇总的具体表现形式为对象或数组。
示例代码如下所示:
var jsonObj = {
"name": "白月初",
"obj": "最强红线仙"
}
JavaScript 的 JSON 对象
JavaScript 语言中存在 JSON 对象。
JSON 对象包含两个方法: 用于解析 JSON 的 parse() 方法,以及将对象/值转换为 JSON 字符串的 stringify() 方法。除了这两个方法, JSON 这个对象本身并没有其他作用,也不能被调用或者作为构造函数调用。
JSON.parse() 方法:解析 JSON 字符串并返回对应的值。
语法结构如下所示:
JSON.parse(text)
参数说明:
text: 表示要被解析称为 JavaScript 的字符串。
JSON.stringify() 方法:返回与指定值对应的 JSON 字符串。
语法结构如下所示:
JSON.stringify(value)
参数说明:
value: 将要序列化成 一个 JSON 字符串的值。
示例代码如下所示
var jsonObj = {
"name": "白月初",
"obj": "最强红线仙"
}
// 通过 JSON.stringify() 将JSON 对象转换为 JSON 字符串
var jsonString = JSON.stringify(jsonObj)
console.log(typeof jsonString);
console.log(jsonString);
// 通过 JSON parse() 方法将 JSON 字符串 转换为 JSON 对象
var jsonObject = JSON.parse(jsonString)
console.log(jsonObject);
console.log(typeof jsonObject);
执行结果如下所示:
string
{"name":"白月初","obj":"最强红线仙"}
{ name: '白月初', obj: '最强红线仙' }
object
Ajax 中的 JSON
构建 JSON 数据格式
通过 Ajax 向服务器端提交异步请求时,允许使用 JSON 格式的请求数据。如下示例代码所示:
<body>
<button id="btn">按钮</button>
<script>
var btn = document.getElementById('btn')
btn.addEventListener('click', function () {
var xhrReq = new XMLHttpRequest();
xhrReq.open('POST', 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON');
var obj = {
"name": "白月初",
"obj": "最强红线仙"
}
xhrReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
var jsonTest = JSON.stringify(obj)
xhrReq.send(jsonTest);
})
</script>
</body>
写在最后
本篇博文介绍了 JSON 这个数据格式,此数据格式支持任何一种编程语言,是现在比较通用的一种用于客户端与服务器端交换数据的格式。