什么是 JSON? 初学者指南
如果您刚开始进行 Web 开发之旅,即使您不知道它是什么,您可能已经无数次遇到了 JSON。JSON 代表 JavaScript 对象表示法,是应用程序之间传输数据最广泛使用的格式。从您在社交媒体上阅读的推文到手机上的天气数据,JSON 都在幕后工作,使这一切成为可能。
简单来说什么是 JSON
将 JSON 视为不同计算机系统之间数据的通用翻译器。就像人类同意在国际商务中使用英语作为通用语言一样,计算机和应用程序在很大程度上同意使用 JSON 作为交换信息的通用格式。但是,与之前出现的替代方案相比,JSON 有什么特别之处呢? 从本质上讲,JSON 只是一种遵循特定规则将数据写成文本的方式。这些规则足够简单,人类可以阅读,计算机也可以轻松解析。当您查看 JSON 文件时,您会看到使用几个基本元素以清晰的层次结构组织的数据:大括号 {} 用于对象,方括号 [] 用于列表,冒号用于分隔名称和值,逗号用于分隔项目。 与其前身 XML 不同,XML 使用冗长的开始和结束标记,如 <name>张三</name>,JSON 使用更简洁的语法:{"name": "张三"}。这种简单性是 JSON 变得如此流行的关键原因之一。它不那么杂乱,更容易编写,并且在通过网络传输时占用更少的空间。 JSON 自然地表示现实世界的概念。一个人可以表示为具有姓名、年龄和电子邮件等属性的对象。购物车可以是产品对象的数组。公司可以是包含员工和部门数组的对象。现实世界实体与 JSON 结构之间的这种自然映射使其使用起来如此直观。 尽管名称中包含"JavaScript",但 JSON 完全独立于语言。每种主要编程语言都内置支持解析和生成 JSON。Python 有 json,Java 有 Jackson 和 Gson,PHP 有 json_encode 和 json_decode,而 JavaScript 自然地使用 JSON,因为语法基于其对象字面量表示法。这种通用支持是 JSON 成为数据交换事实标准的另一个原因。
为什么 JSON 如此流行
JSON 在数据交换领域的崛起并非偶然。它作为开发者面临的实际问题的解决方案出现,并且它继续蓬勃发展,因为它比替代方案更好地解决了这些问题。 在 JSON 广泛使用之前,XML 是 Web 服务之间数据交换的主要格式。虽然 XML 功能强大且灵活,但它带来了显著的开销。XML 文档需要处理指令、命名空间、属性与元素的决策,以及使用复杂的 DOM 或 SAX 解析器进行解析。对于简单的数据交换,这太过分了。开发者想要更轻量级的东西。 JSON 提供了这种轻量级的替代方案。以 XML 返回用户列表的 REST API 可能需要数十行开始和结束标记,而 JSON 中的相同数据可以用一小部分空间表示。这种有效负载大小的减少直接转化为更快的网络传输和更低的带宽成本,这对于移动应用程序尤其重要,其中每个字节都很重要。 解析的情况同样令人信服。在 JavaScript 中,解析 JSON 基本上是免费的,因为 JSON.parse() 可以立即将字符串转换为本地 JavaScript 对象。将其与 XML 解析进行比较,后者需要创建解析器对象、处理节点类型和导航文档树。即使在其他语言中,JSON 解析通常也比 XML 解析更简单、更快。 JSON 的简单性还降低了开发者的学习曲线。初级开发者可以在几分钟内理解 JSON 的语法:具有键值对的对象、值的数组以及少数数据类型(字符串、数字、布尔值、null)。无需了解 DTD、XPath、XSLT 或通常伴随 XML 的其他十几种技术。 REST API 和单页应用程序的兴起为 JSON 的蓬勃发展创造了完美的环境。随着 Web 应用程序转向异步获取数据并在客户端渲染,开发者需要一种 JavaScript 可以轻松使用的格式。JSON 就是那种格式。 今天,JSON 无处不在。它是几乎每个 Web API 的响应格式。它是文档数据库(如 MongoDB 和 CouchDB)的存储格式。它是 Node.js 包(package.json)、TypeScript(tsconfig.json)、VS Code 设置和无数其他工具的配置格式。学习 JSON 不仅有用,而且对现代软件开发至关重要。
JSON 示例
理解 JSON 的最佳方式是看它的实际应用。让我们通过逐步复杂的示例来演示 JSON 的功能以及它如何建模现实世界的数据。 最简单的 JSON 只是一个单一值。虽然在 API 中不常见,但这些都是有效的 JSON:42(数字)、"你好"(字符串)、true(布尔值)、null(空值)。然而,您遇到的大多数 JSON 都由对象或数组组成。 基本的 JSON 对象表示具有属性的单个实体:{"name": "张三", "age": 30, "email": "[email protected]"}。每个属性都有一个键(引号中的名称)和一个值(可以是任何 JSON 数据类型)。键和值由冒号分隔,属性由逗号分隔。 数组允许您表示值列表:["苹果", "香蕉", "樱桃"]。数组可以包含任何 JSON 值,包括混合类型,尽管实际上数组通常包含相同类型的项目以保持一致性。 当您嵌套对象和数组时,JSON 的真正威力就会显现出来。这是一个更现实的示例,表示用户配置文件: {"id": 12345, "username": "zhangsan", "profile": {"firstName": "三", "lastName": "张", "bio": "来自北京的软件开发者"}, "interests": ["编程", "徒步旅行", "摄影"], "socialLinks": [{"platform": "twitter", "url": "https://twitter.com/zhangsan"}, {"platform": "github", "url": "https://github.com/zhangsan"}], "settings": {"newsletter": true, "darkMode": false, "language": "zh"}, "createdAt": "2024-01-15T10:30:00Z"} 这个单一的 JSON 对象包含:原始值(id 作为数字,username 作为字符串),嵌套对象(profile),简单数组(interests),对象数组(socialLinks),具有布尔值的设置对象,以及 ISO 8601 格式的日期字符串。这展示了 JSON 如何优雅地表示复杂的现实世界数据结构。 当使用适当的缩进格式化时,此结构立即变得可读,每个嵌套级别都缩进以清楚地显示层次结构。
JSON 的使用场景
JSON 已经变得如此普遍,以至于列出它的使用位置几乎就像列出电力的使用位置一样——它无处不在。了解 JSON 应用的广度有助于欣赏为什么它是如此宝贵的掌握技能。 JSON 最突出的用途是 Web API。当您的天气应用程序获取预报时,当您的社交媒体源加载新帖子时,当您的电子商务网站检索产品详细信息时——这些通常都是通过返回 JSON 响应的 HTTP 请求发生的。REST 架构风格和 JSON 在现代 Web 开发中几乎成为同义词。即使是像 GraphQL 这样的新 API 范式也使用 JSON 作为其响应格式。 配置文件是 JSON 的另一个主要领域。Node.js 生态系统在 package.json 上标准化,用于管理依赖项和项目元数据。这一决定意味着数百万开发者每天都会使用 JSON。TypeScript 使用 tsconfig.json,Babel 使用 babel.config.json,ESLint 使用 .eslintrc.json,VS Code 在 JSON 文件中存储设置,列表还在继续。JSON 的人类可读性使其成为开发者需要阅读和编辑的配置的理想选择。 文档数据库(如 MongoDB 和 CouchDB)将数据存储为 JSON 文档(从技术上讲,在 MongoDB 的情况下是二进制 JSON 格式 BSON)。存储格式和 API 格式之间的这种对齐大大简化了开发。您可以直接存储 JavaScript 对象,而无需将其映射到表和列,并以相同的形式检索它。 浏览器 API 广泛使用 JSON。localStorage 和 sessionStorage API 将数据存储为字符串,因此 JSON.stringify() 和 JSON.parse() 通常用于存储复杂的数据结构。Fetch API 返回具有方便的 .json() 方法的 Response 对象,用于解析响应。 消息队列、事件流和服务间通信的数据序列化经常使用 JSON。Apache Kafka、RabbitMQ 和 AWS SQS 通常传输 JSON 编码的消息。来自 Stripe、GitHub 和 Slack 等服务的 Webhook 将事件数据作为 JSON 有效负载传递。 即使在 Web 开发之外,JSON 也找到了应用。科学数据交换、像 Ansible 这样的配置管理工具、物联网设备通信和日志聚合系统都利用 JSON。该格式的简单性和通用支持使其成为多个系统需要交换数据时的安全选择。 随着您在开发职业生涯中的进步,您将在无数上下文中使用 JSON。深入理解它的投资在您接触的每个项目中都会得到回报。
试用工具
JSON格式化工具