

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# JSON 函数
<a name="json-functions"></a>

**Topics**
+ [JSON\$1PARSE 函数](JSON_PARSE.md)
+ [CAN\$1JSON\$1PARSE 函数](CAN_JSON_PARSE.md)
+ [JSON\$1SERIALIZE 函数](JSON_SERIALIZE.md)
+ [JSON\$1SERIALIZE\$1TO\$1VARBYTE 函数](JSON_SERIALIZE_TO_VARBYTE.md)
+ [基于文本的 JSON 函数](text-json-functions.md)

**注意**  
我们建议您使用以下函数来处理 JSON：  
 [JSON\$1PARSE 函数](JSON_PARSE.md) 
 [CAN\$1JSON\$1PARSE 函数](CAN_JSON_PARSE.md) 
 [JSON\$1SERIALIZE 函数](JSON_SERIALIZE.md) 
 [JSON\$1SERIALIZE\$1TO\$1VARBYTE 函数](JSON_SERIALIZE_TO_VARBYTE.md) 
使用 JSON\$1PARSE，您只需要在摄取时将 JSON 文本转换为 SUPER 类型值一次，之后就可以对 SUPER 值进行操作了。Amazon Redshift 解析 SUPER 值的效率比 VARCHAR 更高，后者是基于文本的 JSON 函数的输出。有关处理 SUPER 数据类型的更多信息，请参阅[Amazon Redshift 中的半结构化数据](super-overview.md)。

当您需要存储相对较小的一组键值对时，您可以通过以 JSON 格式存储数据来节省空间。由于 JSON 字符串可存储在单个列中，因此使用 JSON 可能比以表格格式存储数据更高效。例如，假设您有一个稀疏表，在此表中，您需要设置多个列来完整表示所有可能的属性，但大多数列值对任何给定行或任何给定列为 NULL。通过将 JSON 用于存储，您可能能够将行的数据以键值对的形式存储在单个 JSON 字符串中并删除稀疏填充的表列。

此外，当 JSON 架构发生变化时，您还可以轻松修改 JSON 字符串来存储其它键值对，而无需向表添加列。

我们建议慎用 JSON。若要存储较大的数据集，JSON 不是一个好的选择，因为将分散的数据存储在单个列中后，JSON 不会利用 Amazon Redshift 的列存储架构。虽然 Amazon Redshift 支持跨 CHAR 和 VARCHAR 列的 JSON 函数，但我们建议使用 SUPER 来处理 JSON 序列化格式的数据。SUPER 使用可以有效查询分层数据的后解析无 schema 表示。有关 SUPER 数据类型的更多信息，请参阅[Amazon Redshift 中的半结构化数据](super-overview.md)。

JSON 使用 UTF-8 编码的文本字符串，因此 JSON 字符串可存储为 CHAR 或 VARCHAR 数据类型。

JSON 字符串必须是根据以下规则正确设置格式的 JSON：
+ 根级别的 JSON 可以是 JSON 对象或 JSON 数组。JSON 对象是用大括号括起的一组无序的键值对（由逗号分隔）。

  例如，`{"one":1, "two":2} `
+ JSON 数组是用方括号括起的一组有序值（由逗号分隔）。

  以下是示例：`["first", {"one":1}, "second", 3, null] `
+ JSON 数组使用从零开始的索引；数组中的第一个元素位于位置 0。在 JSON 键:值对中，键是用双引号括起的字符串。
+ JSON 值可能为以下任一值：
  + JSON 对象 
  + 数组 
  + 字符串
    + 用双引号表示
  + 数字
    + 包括整数、小数和浮点数
  + 布尔值
  + null 
+ 空对象和空数组是有效的 JSON 值。
+ JSON 字段区分大小写。
+ 将忽略 JSON 结构元素之间的空格（如 `{ }, [ ]`）。

Amazon Redshift JSON 函数和 Amazon Redshift COPY 命令使用相同的方法处理 JSON 格式的数据。有关使用 JSON 的更多信息，请参阅[从 JSON 格式数据执行的 COPY 操作](copy-usage_notes-copy-from-json.md)。