繁体   English   中英

TSQL 从 JSON 中选择基本分层数据

[英]TSQL Select basic hierarchical data from JSON

这是一个非常简单的问题,但我在任何地方都找不到一个可行的例子。 MSDN 暗示这是可能的( herehere ),但错过了实际示例,Google 提供了无数TSQL 输出 JSON 的示例,而我需要相反的示例。

采用最基本的 JSON 结构:

DECLARE @json nvarchar(max) = N'[{
    "Id":       1,
    "name":     "John",
    "skills": [
        {"title":   "Azure" },
        {"title":   "VB" },
        {"title":   "JavaScript" }]
}, {
    "Id":       2,
    "name":     "Jane",
     "skills": [
        {"title":   "Azure" },
        {"title":   "SQL" },
        {"title":   "C#" }]
}]';

我想出了如何获得最高级别的值,例如Idname

SELECT
    *
FROM
    OPENJSON(@json) WITH (
    ID int '$.Id',
    name nvarchar(50) '$.name'
    );

我想要的是输出PersonId和各自的技能 title s,例如

PersonId     SkillTitle
-----------------------
1            Azure
1            VB
1            JavaScript
2            Azure
2            SQL
2            C#

谷歌只为我提供了反向逻辑。 我根据我所能找到的严重破坏的尝试在这里:

SELECT
    *
FROM
    OPENJSON(@json, '$.skills') WITH (
        PersonId int './Id',
        SkillTitle nvarchar(50) '$.title'
    );

下面的代码片段会给你所需的结果 -

SELECT
    JSON_Value (c.value, '$.Id') as ID, 
    JSON_Value (p.value, '$.title') as SkillTitle
FROM OPENJSON (@json) as c
CROSS APPLY OPENJSON(c.value,'$.skills') as p

通过CROSS APPLYJSON子节点与父节点并使用JSON_Value()函数实现了相同的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM