什么是 JSON?语法、类型和 API 的数据交换
无刮痕抓取 API 提供任务特定的接口,可以在应用工作流中以 JSON 格式返回结构化的公共网络数据。
概括
- JSON 是一种用于结构化数据交换的文本格式。 它表示对象、数组、字符串、数字、布尔值和 null。
- JSON 是与语言无关的。 它的表示法源自 JavaScript,但解析器和生成器在各种编程生态系统中存在。
- 有效的语法并不保证有效的业务数据。 模式和应用程序检查必须强制执行必填字段、范围、格式和关系。
- 对象是无序的名称和值的集合。 应用程序不应对成员顺序赋予含义。
- 互操作性需要严格的数字和文本处理。 Unicode、重复名称、大整数、十进制精度和日期字符串需要明确的约定。
JSON 定义
JSON,或称 JavaScript 对象表示法,是一种轻量级、基于文本的、与语言无关的数据交换格式。它用小型语法表示结构化值,主要由对象、数组、字符串、数字、字面量 true 和 false 以及 null 构成。JSON 被广泛用于 Web API 请求、响应、配置、日志、事件和存储文档,因为人类可以检查它,而大多数语言可以解析它。
规范 IETF JSON 规范,RFC 8259 将 JSON 文本定义为序列化值并提供互操作性指导。JSON 不是可执行的 JavaScript,不支持标准语法中的注释,也不定义日期、二进制值、非字符串键的集合、映射或特定于应用程序的类型。这些含义必须由商定的模式或约定表示。
JSON 如何表示数据
什么是 JSON 背后的机制跨越多个软件或网络边界。命名每个阶段使得性能、正确性和安全性审查具体化。
对象和成员名称
一个对象由大括号界定,并包含名称值成员。名称是字符串。规范将对象名称描述为无序,因此消费者应通过名称而非位置访问成员。唯一名称产生最具互操作性的行为,因为重复名称处理方式各异。
数组和值
数组是由方括号界定的有序序列。每个位置可以包含任何 JSON 值,包括另一个数组或对象。当顺序有意义或多个记录共享一个概念集合时,数组效果很好。
字符串、数字和字面量
字符串使用引号和转义规则处理控制字符和特殊字符。数字使用不包含 NaN 或 Infinity 的十进制语法。布尔字面量和 null 是小写。解析器将这些值映射到主机语言类型,这些类型可能具有不同的精度限制。
JSON 值和应用程序含义
团队通常会就标签达成一致,而假设不同的行为。这些行将什么是 JSON 转变为明确的合同和操作问题。
| 概念 | 含义 | 实际信号 |
|---|---|---|
| 对象 | 具有 JSON 值的命名成员。 | 记录、配置对象或键关系。 |
| 数组 | 有序值。 | 记录列表、坐标或序列。 |
| 字符串 | 使用 JSON 转义规则的 Unicode 文本。 | 根据惯例的名称、标识符、时间戳和人类文本。 |
| 数字 | 十进制数字语法。 | 在商定精度范围内的计数、测量或金额。 |
| 布尔值和 null | 真值和明确的 null 字面量。 | 当模式定义意义时,标志和明确缺失或未知的值。 |
JSON 特别适用的地方
采用或优化 What Is JSON 的最强理由是与工作流程的可衡量契合。这些场景描述了这种契合,而不将这个术语视为普遍的默认值。
Web API
JSON 自然映射到常见的应用记录,并得到浏览器、服务器、网关和客户端库的支持。
配置
当评论和更丰富的数据类型不必要时,小而结构化的设置是可读和可移植的。
事件消息
生产者和消费者可以通过队列和流交换按合同类型化的记录。
标准化的网络数据
提取系统可以将特定页面的内容转换为可存储和后续分析的稳定对象。
解析、验证和互操作性
解析回答输入是否遵循 JSON 语法,并生成主语言值。验证回答该值是否满足应用程序合同。解析后的对象仍可能省略所需的标识符,包含不支持的状态,使用错误的单位或违反字段之间的关系。保持这些阶段分开,以便错误消息能够识别出正确的问题。
为生产接口定义架构或等效合同。指定必需和可选成员、可空性、数字约束、字符串格式、数组界限、未知成员策略和兼容性规则。 JSON Schema 核心规范 定义了用于注释和验证 JSON 实例的词汇,尽管应用程序仍然拥有领域授权和状态规则。
规划主语言之间的差异。一些环境使用浮点类型表示每个数字,这无法准确表示所有的大整数。十进制货币值也可能失去精度。当精确性重要时,请使用字符串或显式的十进制约定,并记录权衡。将时间戳视为具有定义格式和时区规则的字符串,而不是假设 JSON 提供日期类型。
常见的 JSON 错误
- 向标准 JSON 文档添加注释。 一些工具接受扩展,但可互操作的 JSON 消费者可能会拒绝它们。
- 依赖对象成员顺序。 对象在概念上是无序的;当顺序具有意义时请使用数组。
- 使用重复的成员名称。 解析器可能保留第一个值、保留最后一个值、暴露所有值或拒绝文档。
- 将标识符转换为数字。 前导零和超出安全整数范围的值可能会丢失;标识符通常更好地表示为字符串。
- 信任解析的输入。 语法验证不能替代大小限制、架构检查、授权和安全处理不受信任的字符串。
API 和 Web 数据管道中的 JSON
在 API 边界,发送正确的媒体类型,按指定解码文本,限制接收有效负载大小,使用维护的库进行解析,并验证结果值。在其到达业务逻辑之前,拒绝格式错误或合同无效的输入。错误响应应识别字段而不回显秘密或整个敏感有效负载。生产者和消费者还应记录数值精度、字符编码和未知成员处理。
在网络提取边界,保持源观察与规范化字段分开。保留源标识符和集合元数据,然后将值映射到定义类型和缺失数据行为的架构中。不要为每个缺失制造空字符串;空值、遗漏和空值可以有不同的含义。
对于长期存储,版本化应用程序架构并记录转换。JSON 语法可能保持稳定,而业务合同则发展。消费者需要一个兼容性政策,以适应添加的成员、删除的成员、改变的枚举和嵌套重构。测试旧的和新的生产者是否符合支持的消费者范围。
What Is JSON 审查清单
使用这些检查将 What Is JSON 定义转化为开发者、操作员或审查员可以重现的实施证据。
- 重述边界。 对于 What Is JSON,确定调用者、提供者、路径和标记完整结果的确切事件。
- 验证中心声明。 通过实施及其文档确认此声明:JSON 是一种用于结构化数据交换的文本格式。它表示对象、数组、字符串、数字、布尔值和 null。
- 追踪机制。 观察对象和成员名称、数组、值、字符串、数字和字面量,并记录每个阶段归属的组件。
- 检查最接近的区别。 记录为什么在这个系统中 Object 意味着“具有 JSON 值的命名成员。”
- 测试一个代表性的用例。 使用具有现实数据、位置、数量和权限边界的 Web API。
- 防范已知错误。 审查“向标准 JSON 文档添加注释。”并添加一个接受检查以捕获它。
- 限制工作量。 为什么是JSON设置适当的主题限制,包括有效负载、并发、执行时间和适用的存储输出。
- 记录决定。 解释为什么为什么是JSON适合这个边界,并列出可以在后期证明不同方法的证据。
结论
为什么是JSON应该描述设计中可测试的部分,而不是充当邻近行为的松散标签。审查应保留这一核心决定:JSON是一种用于结构化数据交换的文本格式。它表示对象、数组、字符串、数字、布尔值和null。它还应该防止在标准json文档中添加注释,并将为什么是JSON的访问限制在接口或网络的记录政策内。
准备好构建您的网页数据工作流程了吗?
将一个测量过的为什么是JSON获取或集成步骤连接到上述验证和存储实践。
今天注册并获得 $5的免费信用 — 无需信用卡.
领取您的$5信用→常见问题
JSON代表什么?
JSON代表JavaScript对象表示法。它是一种基于文本的、与语言无关的数据交换格式,源自JavaScript对象表示法。
JSON是一种编程语言吗?
不。JSON是一种数据格式。它有表示结构化值的语法,但没有变量、控制流、函数或执行模型。
JSON可以包含注释吗?
标准JSON不包括注释语法。一些配置工具接受类似JSON的扩展,但旨在与可互操作的JSON消费者协作的文档应遵循标准语法。
JSON和JavaScript对象之间有什么区别?
JSON是有限语法的序列化文本,而JavaScript对象是可以包含函数、符号、原型、未定义以及JSON无法表示的其他特性的运行时值。