适用于: SQL Server 2016 (13.x) 及更高版本 Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics(仅限无服务器 SQL 池)

使用 JSON 路径表达式可引用 JSON 对象的属性。

在调用以下函数时,必须提供路径表达式。

  • 调用 OPENJSON 以创建 JSON 数据的关系视图时。 有关详细信息,请参阅 OPENJSON (Transact-SQL)

  • 调用 JSON_VALUE 以从 JSON 文本中提取值。 有关详细信息,请参阅 JSON_VALUE (Transact-SQL)

  • 调用 JSON_QUERY 以提取 JSON 对象或数组时。 有关详细信息,请参阅 JSON_QUERY (Transact-SQL)

  • 调用 JSON_MODIFY 以更新 JSON 字符串的属性值时。 有关详细信息,请参阅 JSON_MODIFY (Transact-SQL)

    路径表达式的各部分

    路径表达式由两部分组成。

  • 可选的 路径模式 ,其值为 lax 或 strict

  • 路径 本身。

    在路径表达式的开头,可以选择指定关键字 lax strict 来声明路径模式。 默认值为 lax

  • 在 lax 模式下,如果路径表达式包含错误,函数将返回空值 。 例如,如果请求值 $.name,但 JSON 文本不包含 name 键,函数将返回 null,但不会引发错误

  • 在 strict 模式下,如果路径表达式包含错误,函数将引发错误

    以下查询显式指定路径表达式中的 lax 模式。

    DECLARE @json NVARCHAR(MAX);
    SET @json=N'{ ... }';
    SELECT * FROM OPENJSON(@json, N'lax $.info');
    

    在声明可选的路径模式后,请指定路径本身。

  • 美元符号 ($) 表示上下文项。

  • 属性路径是一组路径步幅。 路径步幅可以包含下列元素和运算符。

  • 键名。 例如,$.name$."first name"。 如果键名以美元符号开头或者包含空格或点运算符 (.) 等特殊字符,请为其加上引号。

  • 数组元素。 例如 $.product[3]。 数组从零开始。

  • 点运算符 (.) 指示对象的成员。 例如,在 $.people[1].surname 中,surnamepeople 的子级。

    内置函数如何处理重复的路径

    如果 JSON 文本包含重复属性,例如,同一级别上有两个同名的键,JSON_VALUE 和 JSON_QUERY 函数将仅返回第一个与路径匹配的值。 若要分析包含重复键的 JSON 对象并返回所有值,请使用 OPENJSON,如下面的示例中所示

    DECLARE @json NVARCHAR(MAX);
    SET @json=N'{"person":{"info":{"name":"John", "name":"Jack"}}}';
    SELECT value
      FROM OPENJSON(@json,'$.person.info');
    

    详细了解 SQL Server 和 Azure SQL 数据库中的 JSON

    Microsoft 视频

    此部分中的某些视频链接在此时可能不起作用。 Microsoft 会将以前在第 9 频道上的内容迁移到新平台。 随着视频迁移到新平台,我们将更新链接。

    有关 SQL Server 和 Azure SQL 数据库中内置 JSON 支持的视频介绍,请观看以下视频:

  • JSON 充当 NoSQL 和关系环境之间的桥梁
  • OPENJSON (Transact-SQL)
    JSON_VALUE (Transact-SQL)
    JSON_QUERY (Transact-SQL)

    Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see: https://aka.ms/ContentUserFeedback.

    提交和查看相关反馈

  •