【问题标题】:Select Json Object as nvarchar(max) in JSON_VALUE在 JSON_VALUE 中选择 Json Object 作为 nvarchar(max)
【发布时间】:2020-04-13 06:49:20
【问题描述】:

我不知道如何将 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" }

【问题讨论】:

    标签: sql-server open-json json-value


    【解决方案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"
        }
    

    【讨论】:

      猜你喜欢
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      相关资源
      最近更新 更多