如何在 SQL Server 2016 中使用 OPENJSON 在 Json 中读取带有空格的字段名称

Jay*_*ank 6 t-sql json sql-server-2016

我怎样才能在该字段名称读取JSON文件值包含使用空间OPENJSONSQL服务器2016。请参阅以下代码:

DECLARE @json NVARCHAR(MAX)
SET @json = N'{ "full name" : "Jayesh Tank"}';
SELECT * FROM OPENJSON(@json) WITH ( [name] [varchar](60) '$.full name')
Run Code Online (Sandbox Code Playgroud)

该空间中的另一个示例代码位于字段名称之后。

SET @json = N'{ "name   " : "abc"}';
SELECT * FROM OPENJSON(@json) WITH ( [name] [varchar](60)    '$.name')
Run Code Online (Sandbox Code Playgroud)

'$.name' 将返回空值。有没有办法读取这个值?

tuk*_*kan 10

通常,在属性名称中使用空格是一个坏主意。

我会[ ]从您的 OPENJSON 名称和 varchar(60) - 源 MSDN OPENJSON 中删除

现在来实际回答你的问题:

您需要在WITH子句中用双引号格式化您的属性:

@DECLARE @json NVARCHAR(MAX);
SET @json=N'{ "full name" : "Jayesh Tank"}';
SELECT * FROM OPENJSON(@json) WITH (name varchar(60) '$."full name"')
Run Code Online (Sandbox Code Playgroud)

对于第二个:

SET @json = N'{ "name   " : "abc"}';
SELECT * FROM OPENJSON(@json) WITH ( name varchar(60)'$."name   "')
Run Code Online (Sandbox Code Playgroud)