Select Json JSON_VALUE 中的对象为 nvarchar(max)

Select Json Object as nvarchar(max) in JSON_VALUE

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

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

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" }

您需要以不同的方式执行语句。请注意,当您将 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"
    }