适用于:
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
中,surname
是 people
的子级。
内置函数如何处理重复的路径
如果 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.
提交和查看相关反馈