0

我不知道如何将 JSON 的路径提取为nvarchar(max). 它总是返回 null。

我不想指定要获取的字段,因为我不知道字段名称。所以这里的想法是选择它作为一个字符串并稍后处理它们。

DECLARE @json nvarchar(max) =
'{
    "firstName": "John",
    "lastName" : "doe",
    "address"  : {
        "streetAddress": "naist street",
        "city"         : "Nara",
        "postalCode"   : "630-0192"
    }
}'

SELECT [Type]
FROM OPENJSON( @json, '$.address' ) 
WITH ([Type] NVARCHAR(max) '$');

预期结果是该Type列包含address作为字符串的整个 JSON 对象

{ "streetAddress": "naist street", "city": "Nara", "postalCode" : "630-0192" }
4

1 回答 1

1

您需要以不同的方式执行该语句。请注意,当您使用OPENJSON()显式模式时,您需要AS JSON指定引用的属性包含内部 JSON 对象或数组。当然,您可以使用JSON_QUERY()来获得相同的结果:

JSON:

DECLARE @json nvarchar(max) =
'{
    "firstName": "John",
    "lastName" : "doe",
    "address"  : {
        "streetAddress": "naist street",
        "city"         : "Nara",
        "postalCode"   : "630-0192"
    }
}'

声明(使用OPENJSON()):

SELECT *
FROM OPENJSON(@json) 
WITH ([Type] NVARCHAR(max) '$.address' AS JSON);

声明(使用JSON_QUERY()

SELECT JSON_QUERY(@json, '$.address') AS [Type]

结果:

Type
{
        "streetAddress": "naist street",
        "city"         : "Nara",
        "postalCode"   : "630-0192"
    }
于 2020-04-13T06:54:00.383 回答