使用JSON_VALUE访问SQL Server 2016中的JSON数组

使用新引入的JSON_VALUE函数访问json内的数组时,我陷入了困境。请考虑以下代码-

IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='JsonData')

DROP TABLE JsonData;

go

CREATE TABLE JsonData(JsonData nvarchar(max));

DECLARE @SQL nvarchar(max);

DECLARE @Table AS TABLE(JsonPath VARCHAR(256));

INSERT INTO JsonData(JsonData)

VALUES(

'{

"firstName": "John",

"lastName" : "doe",

"age" : 26,

"address" : {

"streetAddress": "naist street",

"city" : "Nara",

"postalCode" : "630-0192"

},

"phoneNumbers": [

{

"type" : "iPhone",

"number": "0123-4567-8888"

},

{

"type" : "home",

"number": "0123-4567-8910"

}

]

}')

INSERT INTO @Table

SELECT VALUE FROM OPENJSON('{

"Path1":"$.firstName","Path2":"$.phoneNumbers[:1].number"

}') ;

SELECT @SQL=(SELECT 'UNION SELECT '''+ CAST(JsonPath AS VARCHAR(256)) +''',JSON_VALUE(JsonData,'''+a.JsonPath+''')

FROM JsonData a'

FROM @Table a

FOR XML PATH(''), TYPE)

.value('.','NVARCHAR(MAX)')

FROM @Table t;

SELECT @SQL=RIGHT(@SQL,LEN(@SQL)-5)

PRINT @SQL

EXEC SP_EXECUTESQL @SQL;

在这里,如果我想访问特定的电话号码,则访问该节点的常规语法不起作用。在这种情况下,我遇到以下错误

JSON path is not properly formatted. Unexpected character ':' is found at position 15.

虽然当我在http://jsonpath.com上进行检查时,却能够检索值。SQL Server

2016是否使用某些不同的语法来访问JSON值?

回答:

要从phoneNumbers获取全部信息:

DECLARE @json nvarchar(max)=

'{

"firstName": "John",

"lastName" : "doe",

"age" : 26,

"address" : {

"streetAddress": "naist street",

"city" : "Nara",

"postalCode" : "630-0192"

},

"phoneNumbers": [

{

"type" : "iPhone",

"number": "0123-4567-8888"

},

{

"type" : "home",

"number": "0123-4567-8910"

}

]

}'

SELECT [Type], [Number]

FROM OPENJSON( @json, '$.phoneNumbers' )

WITH ([Type] NVARCHAR(25) '$.type', [Number] NVARCHAR(25) '$.number');

以上是 使用JSON_VALUE访问SQL Server 2016中的JSON数组 的全部内容, 来源链接: utcz.com/qa/425610.html

回到顶部