3分钟让你搞懂 JSON 怎么用

2,705 阅读5分钟

古之立大事者,不惟有超世之才,亦必有坚忍不拔之志——苏轼

写在前面

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 这个数据格式,此数据格式支持任何一种编程语言,是现在比较通用的一种用于客户端与服务器端交换数据的格式。