【问题标题】:SQL Extract from JSON "object"从 JSON“对象”中提取 SQL
【发布时间】:2019-04-01 10:53:55
【问题描述】:

所以我需要从 JSON 存储中提取一些数据,并且大部分情况下使用JSONVALUE() 非常简单。不过有些商店似乎使用了更深层次的存储方法。

一些示例代码;

DECLARE @json NVARCHAR(MAX) = '{
"N.data.-60d8249a-ed12-4f41-98f4-01c910c6b2f4": null,
"R.title": "{\"description\":\"Mr\",\"alternates\":{},\"position\":0}",
"R.gender": "{\"description\":\"Male\",\"alternates\":{},\"position\":1}",
"R.jobTitle": "{\"description\":\"Operations\",\"alternates\":{},\"position\":2}"
}'

我需要做的是从每个键中提取“描述”方面。例如,“R.title”会给我“先生”等。

理想情况下,我每次都可以使用参数方法提取特定密钥:

DECLARE @id nvarchar(200) = 'R.title'
SELECT  
*  
FROM OPENJSON(@json, concat('$."',@id,'"')) AS a

有没有正确的方法可以做到这一点,而无需使用讨厌的 substring() 方法?

谢谢!

SQL Server 版本:

Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) 2017 年 8 月 22 日 17:04:49 版权所有 (C) 2017 Microsoft Corporation Express Edition Windows Server 2012 R2 Datacenter 6.3(内部版本 9600:)上的(64 位) (管理程序)

【问题讨论】:

    标签: sql json sql-server


    【解决方案1】:

    这可能是一个迟到的答案,但我希望它有所帮助。您需要使用两个 OPENJSON() 调用和额外的 APPLY 运算符来解析输入 JSON。第一个 OPENJSON() 调用使用默认模式来获取输入 JSON 中所有键的名称。

    声明:

    DECLARE @json NVARCHAR(MAX) = '{
    "N.data.-60d8249a-ed12-4f41-98f4-01c910c6b2f4": null,
    "R.title": "{\"description\":\"Mr\",\"alternates\":{},\"position\":0}",
    "R.gender": "{\"description\":\"Male\",\"alternates\":{},\"position\":1}",
    "R.jobTitle": "{\"description\":\"Operations\",\"alternates\":{},\"position\":2}"
    }'
    
    
    SELECT j.[key], v.description
    FROM OPENJSON(@json) j
    CROSS APPLY OPENJSON(j.[value]) WITH (description nvarchar(max) '$.description') v
    

    结果:

    -----------------------  
    key         description
    -----------------------  
    R.title     Mr
    R.gender    Male
    R.jobTitle  Operations
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-21
      • 2017-08-12
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 2019-03-22
      相关资源
      最近更新 更多