ISJSON (Transact-SQL)

适用于:sql Server 2016 (13.x) 及更高版本 Azure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsSQL 分析终结点Microsoft FabricWarehouse 中的Microsoft Fabric SQL 数据库在 Microsoft Fabric 中的 fabric SQL 数据库

语法 ISJSON 测试字符串是否包含有效的 JSON。

Transact-SQL 语法约定

Syntax

ISJSON ( expression [, json_type_constraint] )  

Arguments

expression

要测试的字符串。

json_type_constraint

指定要签入输入的 JSON 类型。 有效值为 VALUE、ARRAY、OBJECT 或 SCALAR。 在 SQL Server 2022 (16.x) 中引入。

Note

Azure Synapse Analytics 专用池不支持参数json_type_constraint

返回值

如果字符串包含有效 JSON,则返回 1;否则,返回 0。 如果NULL为 null,则返回。

如果语句省略json_type_constraint,函数将测试输入是否为有效的 JSON 对象或数组,否则1返回。0

如果指定 了json_type_constraint ,则该函数将检查 JSON 类型,如下所示:

Value Description
VALUE 测试有效的 JSON 值。 这可以是 JSON 对象、数组、数字、字符串或三个字面量值之一(false、true、null)
ARRAY 测试有效的 JSON 数组
OBJECT 测试有效的 JSON 对象
SCALAR 测试有效的 JSON 标量 - 数字或字符串

值测试 SCALAR 的是仅包含顶层 JSON 标量值的 JSON 文档。 IETF RFC 8259 允许顶层使用任意 JSON 值,因此请测试 VALUE 符合 IETF RFC 8259 标准的 JSON 文档。 IETF RFC 4627 只允许顶层的 JSON 对象或数组。

不返回错误。

Remarks

ISJSON 不检查在相同级别的键的唯一性。

Examples

示例 1

如果参数值 @param 包含有效 JSON,则下面的示例有条件地运行语句块。

DECLARE @param <data type>
SET @param = <value>

IF (ISJSON(@param) > 0)  
BEGIN  
     -- Do something with the valid JSON value of @param.  
END

示例 2

下面的示例将返回其列 json_col 包含有效 JSON 的行。

SELECT id, json_col
FROM tab1
WHERE ISJSON(json_col) = 1 

示例 3

下面的示例将返回其列 json_col 在顶级包含有效 JSON SCALAR 值的行。

SELECT id, json_col
FROM tab1
WHERE ISJSON(json_col, SCALAR) = 1 

示例 4

下面的示例返回 1,因为输入是有效的 JSON 值 - true。

SELECT ISJSON('true', VALUE)

示例 5

下面的示例返回 0,因为输入是无效的 JSON 值。

SELECT ISJSON('test string', VALUE)

示例 6

以下示例返回 1,因为输入是符合 RFC 8259 的有效 JSON 标量。

SELECT ISJSON('"test string"', SCALAR)