ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

副队长JavaScript教程(65)-详解JSON:轻量级数据交换格式

副队长JavaScript教程(65)-详解JSON:轻量级数据交换格式

点此查看所有教程、项目、源码导航

文章目录

  • 1. 背景
  • 2. JSON 的历史与发展过程
    • 2.1 诞生之前:XML 一统江湖
    • 2.2 JSON 的诞生
  • 3. 常见数据格式简单对比:JSON、XML、YAML
    • 3.1 XML
    • 3.2 YAML
    • 3.3 JSON
  • 4. JSON 基础语法与规范
    • 4.1 JSON 支持的数据类型
    • 4.2 强制语法规则(非常重要)
  • 5. JSON 的优势
  • 6. JS 中操作 JSON 的两个 API
    • 6.1 JSON.stringify () 序列化
    • 6.2 JSON.parse () 反序列化
  • 7. 小结

1. 背景

前面我们学习了浏览器本地存储localStorage和sessionStorage,我们发现一个限制:本地存储只能保存字符串。

如果我们想要保存对象、数组,直接存入会变成[object Object],数据损坏无法读取。同时,在前后端交互的时候,服务端和浏览器之间也需要一套统一的文本格式来传递结构化数据,JSON 就是用来解决这类问题的。

JSON 全称JavaScript Object Notation,翻译为 JavaScript 对象表示法。

很多初学者会误以为它是 JS 语言的一部分,这里重点说明:JSON 是独立的文本格式,不是 JS 语法,只是它的语法借鉴了 JS 对象字面量写法,现在几乎所有编程语言都支持解析和生成 JSON,是互联网最主流的数据交换格式JSON。

2. JSON 的历史与发展过程

2.1 诞生之前:XML 一统江湖

在 2000 年前后,网页和服务端之间传递结构化数据,主流方案是 XML。

XML 1998 年由 W3C 发布,它源自更早的 SGML 标记语言,设计目标偏向文档描述,标签成对、结构严谨,自带校验、命名空间等能力,早期的 SOAP 接口、RSS 订阅、早期银行、政务系统大量使用 XML。

但是 XML 标签冗余、体积大、解析繁琐,在浏览器 JS 环境里解析起来很麻烦。

2.2 JSON 的诞生

JSON 由 Douglas Crockford(道格拉斯・克罗克福特)在 2001 年提出,最早在 State Software 公司内部使用,同年发出第一条 JSON 消息。

他从 JS 对象字面量语法里,挑选了一个安全、干净的子集,把它定义成一套独立的数据交换格式,取名 JSON。

2006 年,JSON 正式发布 RFC 4627 标准;2014 年更新为 RFC 7159,成为正式通用标准。

随着 AJAX 技术普及,网页异步请求大量兴起,JSON 凭借在 JS 里天然友好的优势,快速普及;到 2010 年前后,在 Web 接口领域,JSON 已经超过 XML,成为首选格式。

补充:JSON 没有完全淘汰 XML,在一些需要强文档校验、复杂文档结构的场景,XML 至今仍在使用。

3. 常见数据格式简单对比:JSON、XML、YAML

3.1 XML

XML 是标记语言,依靠成对标签包裹数据。
示例:

<user><name>小红</name><age>20</age><hobby>看书</hobby></user>

特点:标签冗余、体积大;支持注释、属性、命名空间、文档校验;解析代码复杂;适合文档、复杂协议、政务、金融旧系统。

3.2 YAML

YAML 是配置文件格式,依靠缩进表达结构,常见于前端打包、Docker、K8s 配置文件。
示例:

name:小红age:20hobby:-看书-跑步

特点:写法简洁,可读性很好;但是缩进严格,缩进错一点就解析失败;一般多用于配置,很少用来做前后端接口传输。

3.3 JSON

我们后面会重点学习,结构紧凑,适合网络传输、本地存储、接口交互。

对比下:

格式主要用途优点缺点
XML老旧接口、文档、金融、政务规范严谨、支持校验标签多、笨重、解析慢
JSONWeb 接口、浏览器本地存储轻量、JS 原生友好、解析快不支持注释、语法严格
YAML项目配置文件简洁、可读性高缩进敏感,不适合网络传输

4. JSON 基础语法与规范

JSON 只有两种顶层结构:对象 {}、数组 []。

4.1 JSON 支持的数据类型

  • 字符串:必须双引号
  • 数字:整数、小数,不需要引号
  • 布尔:true /false(小写)
  • null:空值
  • 对象、数组

❌ JSON不支持:函数、undefined、注释、变量、运算表达式。

4.2 强制语法规则(非常重要)

  1. 对象的属性名(key)必须使用双引号,不能单引号,不能不加引号
  2. 字符串类型的值,也必须双引号
  3. 不能写注释
  4. 末尾不能多余逗号

✅ 标准 JSON 示例:

{"name":"小红","age":20,"isStudent":true,"hobby":["看书","跑步"],"address":null}

❌ 错误写法(这些都不是合法 JSON)

{name:"小红",'age':20,"say":function(){}}

区分重点:JS 对象可以写单引号、可以不加引号、可以放函数;JSON 是严格文本,规则更苛刻。

5. JSON 的优势

  1. 轻量紧凑:相比 XML,同样的数据,JSON 文本更短,占用带宽更少,网络传输更快
  2. JS 原生友好:浏览器内置JSON.stringify()、JSON.parse(),不需要额外引入第三方库
  3. 跨语言通用:Java、Python、PHP、Go 等几乎所有编程语言都有成熟的 JSON 解析工具
  4. 结构清晰:对象、数组的结构和我们日常编程的数据结构一一对应,上手简单
  5. 解析速度快:格式简单,机器解析成本更低

6. JS 中操作 JSON 的两个 API

这两个是浏览器内置方法,用来在 JS 内存数据和 JSON 字符串之间互相转换,也是我们下一篇本地存储实战的核心。

6.1 JSON.stringify () 序列化

JS 对象 / 数组 → JSON 字符串

varuser={name:"小红",age:20};varjsonStr=JSON.stringify(user);console.log(jsonStr);

运行结果:

得到的结果是一段字符串,就可以存入 localStorage。

6.2 JSON.parse () 反序列化

JSON 字符串 → JS 对象 / 数组

varobj=JSON.parse(jsonStr);console.log(obj);console.log(obj.name);

运行结果:

读取本地存储拿到 JSON 字符串之后,用这个方法转回 JS 对象,才能正常读取属性。

7. 小结

  1. JSON 全称 JavaScript Object Notation,是独立的轻量级文本交换格式,不是 JS 语法。
  2. 历史:XML 先行,2001 年 JSON 诞生,2006 标准化,随 AJAX 普及,成为 Web 主流格式。
  3. 对比:XML 适合文档、老旧系统;YAML 适合配置;JSON 适合接口、本地存储。
  4. JSON 语法严格:key 必须双引号,不支持注释、函数、undefined。
  5. 两个核心 API:JSON.stringify序列化、JSON.parse反序列化,用来配合本地存储保存对象、数组。
返回列表