javascript基础从小白到高手系列一十二:JSON

本章内容

 理解JSON 语法

 解析JSON

 JSON 序列化

正如上一章所说,XML 曾经一度成为互联网上传输数据的事实标准。第一代Web 服务很大程度上

是以XML 为基础的,以服务器间通信为主要特征。可是,XML 也并非没有批评者。有的人认为XML

过于冗余和啰唆。为解决这些问题,也出现了几种方案。不过Web 已经朝着它的新方向进发了。

2006 年,Douglas Crockford 在国际互联网工程任务组(IETF,The Internet Engineering Task Force)

制定了JavaScript 对象简谱(JSON,JavaScript Object Notation)标准,即RFC 4627。但实际上,JSON

早在2001 年就开始使用了。JSON 是JavaScript 的严格子集,利用JavaScript 中的几种模式来表示结构

化数据。Crockford 将JSON 作为替代XML 的一个方案提出,因为JSON 可以直接传给eval()而不需

要创建DOM。

理解JSON 最关键的一点是要把它当成一种数据格式,而不是编程语言。JSON 不属于JavaScript,

它们只是拥有相同的语法而已。JSON 也不是只能在JavaScript 中使用,它是一种通用数据格式。很多语

言都有解析和序列化JSON 的内置能力。

语法

JSON 语法支持表示3 种类型的值。

 简单值:字符串、数值、布尔值和null 可以在JSON 中出现,就像在JavaScript 中一样。特殊

值undefined 不可以。

 对象:第一种复杂数据类型,对象表示有序键/值对。每个值可以是简单值,也可以是复杂类型。

 数组:第二种复杂数据类型,数组表示可以通过数值索引访问的值的有序列表。数组的值可以

是任意类型,包括简单值、对象,甚至其他数组。

JSON 没有变量、函数或对象实例的概念。JSON 的所有记号都只为表示结构化数据,虽然它借用了

JavaScript 的语法,但是千万不要把它跟JavaScript 语言混淆。

简单值

最简单的JSON 可以是一个数值。例如,下面这个数值是有效的JSON:

5

这个JSON 表示数值5。类似地,下面这个字符串也是有效的JSON:

"Hello world!"

JavaScript 字符串与JSON 字符串的主要区别是,JSON 字符串必须使用双引号(单引号会导致语法

错误)。

布尔值和null 本身也是有效的JSON 值。不过,实践中更多使用JSON 表示比较复杂的数据结构,

其中会包含简单值。

对象

对象使用与JavaScript 对象字面量略为不同的方式表示。以下是JavaScript 中的对象字面量:

let person = {

name: "Nicholas",

age: 29

};

虽然这对JavaScript 开发者来说是标准的对象字面量,但JSON 中的对象必须使用双引号把属性名

包围起来。下面的代码与前面的代码是一样的:

let object = {

"name": "Nicholas",

"age" : 29

};

而用JSON 表示相同的对象的语法是:

{

"name": "Nicholas",

"age": 29

}

与JavaScript 对象字面量相比,JSON 主要有两处不同。首先,没有变量声明(JSON 中没有变量)。

其次,最后没有分号(不需要,因为不是JavaScript 语句)。同样,用引号将属性名包围起来才是有效的

JSON。属性的值可以是简单值或复杂数据类型值,后者可以在对象中再嵌入对象,比如:

{

"name": "Nicholas",

"age": 29,

"school": {

"name": "Merrimack College",

"location": "North Andover, MA"

}

}

这个例子在顶级对象中又嵌入了学校相关的信息。即使整个JSON 对象中有两个属性都叫"name",

但它们属于两个不同的对象,因此是允许的。同一个对象中不允许出现两个相同的属性。

与JavaScript 不同,JSON 中的对象属性名必须始终带双引号。手动编写JSON 时漏掉这些双引号或

使用单引号是常见错误。

相关推荐
半个落月7 小时前
LangSmith 全链路观测(下):用 Dataset 与 LLM Judge 量化评估 RA
javascript·langchain
半个落月7 小时前
LangSmith 全链路观测(上):用 LangGraph 与 Milvus 构建可追踪的 RAG 客服
javascript·langchain
半个落月8 小时前
LangChain.js Agent 中间件实战:生命周期、动态工具与文件权限
javascript·langchain
北京盛世宏博9 小时前
通信异常深度排查:以太网温湿度设备 TCP 粘包、UDP 丢包根治方案
单片机·网络协议·tcp/ip·udp·以太网·传感器·温湿度
志尊宝9 小时前
Vue3 零基础每日笔记(082):文件上传实战——el-upload 校验、自定义上传、头像预览
前端·javascript·vue.js·笔记·#javascript·#vue.js
bmxy小明同学15 小时前
2026-10-11-幻觉治理
服务器·前端·javascript
m0_5873830015 小时前
无人自助拼豆系统落地开发实战指南 核心逻辑实现与部署经验分享
前端·javascript·vue.js·人工智能·经验分享·需求分析
zhaiyy15 小时前
HTML Popover API 实践
前端·javascript·html
OpsEye16 小时前
企业 AI 管理新需求:不仅要接入模型,还要看懂每一次调用
javascript·ai编程
牧艺16 小时前
SPA 也能像原生 App:View Transitions API 从原理到可上线实战
前端·javascript·css