跳到主要内容

Media:字符串编码非 JSON 数据

Draft 7 中的新内容

JSON 模式有一组关键字来描述和可选地验证存储在 JSON 字符串中的非 JSON 数据。由于很难为许多媒体类型编写验证器,因此不需要 JSON 模式验证器根据这些关键字验证 JSON 字符串的内容。但是,这些关键字对于使用经过验证的 JSON 的应用程序仍然有用。

内容媒体类型​

contentMediaType关键字指定的 MIME 类型的字符串的内容,如在RFC 2046。有一个由 IANA 正式注册的MIME 类型列表,但支持的类型集将取决于应用程序和操作系统。Mozilla Developer Network 还维护了一个较短的对网络很重要的 MIME 类型列表

内容编码​

contentEncoding关键字指定编码用于存储内容,如在规定的RFC 2054,部分 6.1和RFC 4648。

可接受的值为7bit,8bit,binary, quoted-printable,base16,base32,和base64。如果未指定,则编码与包含的 JSON 文档相同。

在不深入了解每种编码的底层细节的情况下,实际上只有两个选项对现代使用有用:

  • 如果内容使用与封闭 JSON 文档相同的编码(出于实际目的,几乎总是 UTF-8),请保持 contentEncoding未指定,并将内容按原样包含在字符串中。这包括基于文本的内容类型,例如text/html或 application/xml。
  • 如果内容是二进制数据,则设置contentEncoding为base64并使用Base64对内容进行编码。这将包括许多图像类型,例如image/png或音频类型,例如audio/mpeg.

内容模式​

2019-09 Draft 中的新内容 文档即将推出

例子​

以下模式指示字符串包含一个 HTML 文档,使用与周围文档相同的编码进行编码:

{
"type": "string",
"contentMediaType": "text/html"
}

// OK
"<!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head></html>"

以下模式指示字符串包含使用 Base64 编码的 PNG 图像:

{
"type": "string",
"contentEncoding": "base64",
"contentMediaType": "image/png"
}

// OK
"iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAA..."