跳到主要内容

Media:字符串编码非 JSON 数据

Draft 7 中的新内容

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

内容媒体类型

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

内容编码

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

可接受的值为7bit8bitbinaryquoted-printablebase16base32,和base64。如果未指定,则编码与包含的 JSON 文档相同。

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

  • 如果内容使用与封闭 JSON 文档相同的编码(出于实际目的,几乎总是 UTF-8),请保持 contentEncoding未指定,并将内容按原样包含在字符串中。这包括基于文本的内容类型,例如text/htmlapplication/xml
  • 如果内容是二进制数据,则设置contentEncodingbase64并使用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..."