JSON

编辑
本词条由“” 建档。

JSON(JSON)是一种紧凑的数据格式,采用易于阅读的文本形式,用于应用程序之间的数据交换。JSON独立于编程语言。所有主要语言都存在解析器和生成器。 JSON最初由DouglasCrockford于1997年指定。它目前(截至2017年底)由两个具有相同内容的标准——RFC8259和ECMA-404指定。 JSON用于传输和存储结构化数据。它用作数据传输(序列化)的数据格式。特别是在Web应用...

JSON(JSON)是一种紧凑的数据格式,采用易于阅读的文本形式,用于应用程序之间的数据交换。 JSON 独立于编程语言。 所有主要语言都存在解析器和生成器。

JSON 最初由 Douglas Crockford 于 1997 年指定。 它目前(截至 2017 年底)由两个具有相同内容的标准——RFC 8259 和 ECMA-404 指定。

应用领域

编辑

JSON 用于传输和存储结构化数据。 它用作数据传输(序列化)的数据格式。 特别是在 Web 应用程序和移动应用程序中,它经常与 JavaScript、Ajax 或 WebSockets 结合使用,在客户端和服务器之间传输数据。

数据结构和格式定义

编辑

字符编码和数据类型

数据可以根据需要嵌套,例如对象的索引列表(“数组”)是可能的,它又包含数组或对象。 默认情况下,JSON 使用 UTF-8 作为字符编码。 UTF-16 和 UTF-32 也是可能的。

JSON 知道以下类型的元素。

空值由关键字 null 表示,布尔值由关键字 true 和 false 表示。 这些不是字符串。 因此,与零一样,它们不放在引号中。Number 是数字 0-9 的序列。 该序列可以由负号和小数点引入。 被打断。 可以通过指定指数 e 或 E 后跟可选符号 + 或 - 以及数字序列 0–9 来补充数字。字符串以双直引号 (") 开头和结尾。它可以包含 Unicode 字符,并且可以是用 分隔包含初始转义序列。数组以 . 开头。它包含相同或不同类型的逗号分隔的索引列表元素。允许使用空数组。对象

以 { 开头,以 } 结尾。 它包含一个以逗号分隔、无序列表的属性。 允许没有属性的对象(“空对象”)。

特征

由一个键和一个用冒号分隔的值组成(键:值)。 键应该是xxx的,因为不同的解析器会以不同的方式处理多次出现的键。 虽然 ECMA-404 不要求xxx性,但 RFC 7159 要求键在对象内是xxx的。

  • 键是一个字符串。
  • 值为任意元素。

允许使用无意义的空白字符,即空格 (Unicode U+0020)、水平制表符 (U+0009)、使用 LF 和/或 CR 的换行符(U+000D 和 U+000A)。 在解释过程中,这些字符在字符串之外被忽略。

限制

JSON 不支持 JavaScript 支持的所有数据类型。 不支持的数据类型序列化如下:

  • NaN、Infinity 和 -Infinity 被序列化为零。
  • 日期对象被转换为符合 ISO-8601 日期格式描述的字符串。
  • 函数、正则表达式错误对象被丢弃。

JSON 模式

编辑

JSON Schema 指定了一种基于 JSON 的格式来定义用于验证、文档和交互控制的 JSON 数据的结构。 它包含特定应用程序所需的 JSON 数据的合同以及如何修改该数据。

JSON Schema 基于 XML Schema 的概念,但它是基于 JSON 的。 与在 XSD 中一样,相同的序列化器和反序列化器可用于架构和数据。 它是自我描述的,由 Internet 工程任务组在 Internet 草案中列出。 有多个验证器可用于不同的编程语言,每个验证器具有不同的一致性级别。

与XML的比较

编辑

JSON 和 XML 都描述了记录的结构。 数据集可以包含其他数据集,这意味着结构可以嵌套到任意深度。

在 XML 中,数据结构的各个节点被命名,而在 JSON 中,节点未命名。

在XML中,简单的字符串既可以被描述为一个元素的属性,也可以被描述为一个独立的元素;JSON中没有这种区别。 这种在大多数情况下无关紧要的灵活性意味着 XML 文档的结构通常会出现不必要的差异。

JSON

JSON 和 XML 都有描述语言来进一步细化“有效”文档的外观,而不是“格式良好”的文档。

JSON 的语法要简单得多,因此通常看起来更具可读性,尤其是更易于编写。 通常,与 XML 相比,JSON 产生的开销也更少。

JSON 和 XML 都必须由特殊的解析器读取。 传统上,任何格式良好的 JSON 文档都是有效的 JavaScript 表达式,但不小心使用 eval() 解释 JSON 文档会引入安全漏洞。

JSON 和 XML 都不太适合表示二进制数据,因为这两种数据格式作为原始数据都是基于字符而不是基于字节的。

JSONP(带填充的 JSON)

编辑

工作原理

通常,对服务器的 Ajax 数据请求是通过 Web 浏览器的 XMLHttpRequest 对象发出的。 由于同源策略,如果 Web 浏览器中显示的网站试图通过与显示的网站位于不同域中的此对象访问服务器,这将不起作用。 这个问题可以通过 JSONP 来规避。 可以在 元素的 src 属性中指定任何 URL。 同源策略不适用于该属性。 因此,可以在另一个域中指定一个返回 JSON 数据的 URL。 但是这个脚本不会有任何效果。

为了能够在客户端处理 JSON 数据,服务器将其打包为已在 Web 浏览器中定义的 JavaScript 函数中的参数。 此函数的名称通常在 URL 的查询字符串中提供给服务器,尽管确切的格式或参数名称并未标准化。

内容由提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/371944/

(7)
词条目录
  1. 应用领域
  2. 数据结构和格式定义
  3. 字符编码和数据类型
  4. 限制
  5. JSON 模式
  6. 与XML的比较
  7. JSONP(带填充的 JSON)
  8. 工作原理

轻触这里

关闭目录

目录