使用新引入的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');