如何使用 SQL Server 解析嵌套 JSON 数组

2024-01-04

我目前能够使用 SQL Server 解析 JSON 文件的大部分内容OPENJSON WITH (...句法。但是,这个特定文件包含我不知道如何处理的嵌套数组。

我读到的许多示例都将 JSON 引用为变量。在这种情况下,我调用一个文件:

select DEV_JSON.*
from OPENROWSET
(BULK 'C:\Users\Myuser\Documents\JSON_extract.json', SINGLE_CLOB) as my_datafile
 CROSS APPLY OPENJSON(BulkColumn) 
WITH
  (DOC_ID           varchar(100)  '$.doc._id',
   DOC_REV          varchar(45)   '$.doc._rev',
   DELY_APPL_NAME   varchar(20)   '$.doc.delivery.application',
   DELY_SENT_BY     varchar(25)   '$.doc.delivery.sender.id',
   DELY_SENT_TYPO   varchar(20)   '$.doc.delivery.sender.type',
   .....
   ....
   ...
   ..) as DEV_JSON

其中一个属性包含一个嵌套数组。下面我复制了 JSON 的前 5 个属性,以及嵌套的“recipients”数组。

如何构建 SQL 来解析此部分?

"doc": {
    "_id": "[email protected] /cdn-cgi/l/email-protection",
    "_rev": "3-e119db13dae8d50ae0c4579ba9c87fc9",
    "delivery": {
        "application": "App_XYZ",
        "sender": {
            "id": "[email protected] /cdn-cgi/l/email-protection",
            "type": "user"
        },
        "recipients": [{
                "type": "email",
                "recipient": "\"Artzer, Daniel J\" <[email protected] /cdn-cgi/l/email-protection>",
                "sentTS": "2017-10-18T13:04:00.133Z"
            },
            {
                "type": "email",
                "recipient": "\"Higgins, Laura L\" <[email protected] /cdn-cgi/l/email-protection>",
                "sentTS": "2017-10-18T13:04:00.133Z"
            },
            {
                "type": "email",
                "recipient": "\"Friedman, Brian\" <[email protected] /cdn-cgi/l/email-protection>",
                "sentTS": "2017-10-18T13:04:00.133Z"
            },
            {
                "type": "email",
                "recipient": "\"Garcia, Charlie M\" <[email protected] /cdn-cgi/l/email-protection>",
                "sentTS": "2017-10-18T13:04:00.133Z"
            }
        ]
    },

我刚刚遇到了同样的问题,最后我用多个 CROSS APPLY 子句解决了它。

这是我的 JSON 的示例:

DECLARE @PermsJSON NVARCHAR(MAX) =
N'[{
    "AppId": 1,
    "Perms":
    [{

        "Permission": ["AA", "BB"],
        "PermissionTypeID": 2
    },
    {
        "Permission": ["10"],
        "PermissionTypeID": 1
    }]
},
{
    "AppId": 2,
    "Perms":
    [{

        "Permission": ["IM", "NM"],
        "PermissionTypeID": 2
    },
    {
        "Permission": ["42"],
        "PermissionTypeID": 1
    }]
}]';

然后我可以使用以下查询解析它:

SELECT
    a.AppId
    ,[Permission] = c.Value
    ,b.PermissionTypeID
FROM
    OPENJSON(@PermsJSON)
    WITH
        (
            AppId INT N'$.AppId'
            ,Perms NVARCHAR(MAX) AS JSON
        ) AS a
CROSS APPLY
    OPENJSON(a.Perms)
    WITH
        (
            PermissionTypeID INT
            ,[Permission] NVARCHAR(MAX) AS JSON
        ) AS b
CROSS APPLY OPENJSON(b.Permission) AS c;

结果如下所示:

AppId   Permission  PermissionTypeID
1       AA          2
1       BB          2
1       10          1
2       IM          2
2       NM          2
2       42          1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 SQL Server 解析嵌套 JSON 数组 的相关文章

  • .net Framework 4.0 中地理 SQL Server 数据类型的 C# 等效项是什么?

    net web应用程序使用 net 4 0框架 我有一个存储过程 它接受 sql server 2008 R2 中的地理数据类型 我想将 C 代码中的数据插入 SQL Server 但我无法找到应在 C 中使用哪种与 SQL Server
  • 来自不同级别的一对值根据邻居成员选择一个

    我正在尝试使用 jq 遍历对象数组并将其转换为 csv 我可以做一些选择和 csv 部分 但我正在努力解决的是如何获得Name每个对象的标签值 json 看起来像这样 Groups Instances InstanceType m5 xla
  • ELMAH 错误和经典 Asp

    我们已经在我们拥有的 ASP NET MVC 网站上使用 ELMAH 进行错误日志记录 但我们的主网站仍然是经典的 asp 我已经开始为该网站创建错误处理 日志记录结构 但我认为它如果我们能够在所有应用程序中保持错误日志记录的一致性 那就太
  • 将数组复制到动态分配的内存

    我的代码可以正常工作 但我觉得好像有一种更快的方法可以做到这一点 特别是在我的函数副本中 这是我的代码 这能再快一点吗 顺便说一句 这是 C 语言 另外 当我从函数返回 cpy 时 它是否会删除动态内存 因为它超出了范围 我不想发生内存泄漏
  • 不同提供商的相同 EDMX 文件

    我正在开发一个项目 其中有一个本地数据库 SQL CE 在不存在与服务器的连接的情况下用作缓冲区 在服务器上我想使用相同的数据库布局 当然 我想使用服务器和客户端上可用的 Common dll 中的相同 EDMX 文件 在客户端中 我有一个
  • SQL 中的代码重用和模块化

    代码重用和模块化对于 SQL 存储过程编程来说是一个好主意吗 如果是这样 将这些功能添加到 SQL 存储过程代码库的最佳方法是什么 我通常为常见且重复的任务创建标量值函数 我发现它不仅可以简化与现有程序类似的新程序的开发 而且还有助于错误跟
  • 使用 JSONP 时出现“无效标签”?

    我的 JSONP 请求有问题 数据不会显示 Firebug 显示 无效标签 错误 我的 JavaScript ajax url link dataType jsonp beforeSend function xhr var base64 b
  • 查询链接服务器时登录失败

    我正在尝试在 SQL Server 中创建链接服务器 Create the link to server uranium EXEC master dbo sp addlinkedserver server N uranium srvprod
  • 如何通过在切片上查找来从切片复制到数组

    我正在编写一个库来处理二进制格式 我有一个带有数组变量的结构 我想保留它以用于文档目的 我还需要从输入字节片中查找和判断 一些伪代码 type foo struct boo 5 byte coo 3 byte func main input
  • 如何创建实体集或模型而不在数据库中创建相应的表 - 实体框架

    我的 sqlserver 数据库中有一个存储过程 它返回多个结果集 我正在使用 msdn 中的以下链接从实体框架中的 SP 读取多个结果集 https msdn microsoft com en us library jj691402 v
  • 如何在 Yii2 应用程序中显示多个选择下拉列表中的选定值?

    我正在研究 Yii2 我正在使用这样的自定义数组创建多个选择下拉菜单 在控制器文件中 all groups Groups find gt where group created by id gt orwhere new Expression
  • 从 Json 纯 JavaScript 创建表

    我有一个带有多个可以更改的键的 Json 如下所示 Var children num 6 name me phone 7 num 8 name him phone 9 我想要一个带有标题的表格 号码 姓名 电话 我怎样才能只用 JavaSc
  • TSQL - 执行CLR权限

    我从 CLR net Assembly 获得了一个 sql 过程 该过程在执行时返回错误 Msg 6522 Level 16 State 1 Procedure sp HelloWorld Line 0 A NET Framework er
  • SQL查询获取最后两条记录的DateDiff

    我有一个名为 Event 的表 其中 eventNum 作为主键 日期作为 SQL Server 2008 R2 中的 datetime2 7 我试图获取表中最后两行的日期并以分钟为单位获取差异 这就是我目前所拥有的 Select DATE
  • 使用 Ajax Jquery post 请求进行 Json 劫持

    昨天 我读了一些关于如何预防的好文章使用 Asp Net MVC 进行 Json 劫持 http haacked com archive 2009 06 24 json hijacking aspx 规则是 永远不要通过 get 请求发送
  • 静态数组VS。 C++11 中的动态数组

    我知道这是一个非常古老的争论 全世界已经讨论过很多次了 但我目前很难决定在特定情况下应该使用静态数组和动态数组之间的哪种方法而不是另一种方法 实际上 我不会使用 C 11 我会使用静态数组 但我现在很困惑 因为两者可能有相同的好处 第一个解
  • 将 json 反序列化为对象:包装类解决方法

    这是我的 json accessType Grant spaces spaceId 5c209ba0 e24d 450d 8f23 44a99e6ae415 privilegeId db7cd037 6503 4dbf 8566 2cca4
  • 参考上一个问题:为什么 VBA 没有加载所有发票详细信息

    除了上一个问题之外 我们在销售发票上仍然存在相同的加载失败问题 下面的 VBA Json 仍然仅加载一行或第一个产品详细信息行 而不是与表中该销售发票合作的所有产品行详细信息 我们希望下面的 VBA 能够根据参数加载发票详细信息 例如 如果
  • 如何自动转换十六进制代码以将其用作 Java 中的 byte[]?

    我这里有很多十六进制代码 我想将它们放入 Java 中 而不需要向每个实体附加 0x 喜欢 0102FFAB 和我必须执行以下操作 byte test 0x01 0x02 0xFF 0xAB 我有很多很长的十六进制代码 有什么办法可以自动做
  • 返回视图作为 JSON 对象的一部分

    我有一个应用程序只加载一次完整视图 我这样做的原因并不重要 重要的是 其余内容只会以部分视图的形式返回 除了一些内容之外 我还有一些 JSON 对象 我想通过每个 AJAX 请求在服务器之间来回传递 有没有办法返回一个 JSON 对象 并将

随机推荐

  • 同一 Ubuntu 机器上的多个 Python 版本

    我在 Ubuntu 机器上 自动安装了 Python 3 10 为了在共享代码库中执行给定任务 我需要使用 Python 3 9 来解决新版本的一些问题 我希望在我的机器上安装这两个Python 并且能够使用这两个Python 并在需要时进
  • Xcode4 显示所有输出(删除“仅显示前 200 个通知”)

    Apple在Xcode4最新版本中添加了新bug 如果输出超过200行 则全部删除 显然 如果有输出 那么它的存在是有原因的 我需要看到它 我尝试寻找首选项 GUI 或按钮 但找不到任何内容 他们肯定没有对其进行硬编码以防止您看到自己的输出
  • 使用 Node.js 进行 SOAP 请求

    嗨 任何人都可以帮助我吗 如何请求 SOAP Web 服务并获取 xml 响应 塞纳里奥 使用soap ui 我发送带有用户名 密码身份验证的wsdl url 并且我还将发送soap xml数据 然后我会得到响应 如何使用 Nodejs 或
  • 如何将 Either 转换为 MonadThrow

    我有一个通过处理错误的函数Either funErrViaEither a gt Either SomeException b 我想在另一个应该更灵活并返回的函数中使用这个函数MonadThrow m funErrViaThrow Mona
  • JavaFX 冻结问题

    我正在摆弄 JavaFX API 由于某种原因 这个应用程序似乎在 看似 随机的时间后冻结了 它是一个制作红绿渐变图案的应用程序 并且有一个很酷的动画与之配合 当应用程序运行时 按 Enter 键 动画就会开始 一段时间后 就像我之前所说的
  • 如何在 gitignore 中使用条件

    我管理着几个pdf and graffle使用 git 生成文件 我想添加pdf仅当以下情况时才将文件存储到存储库graffle具有相同文件名的文件不存在 例如 G 只添加foo pdf and bar graffle进入目录中的存储库 l
  • 如何更改 wp7 中列表框项目的可见性属性?

    例如 有一个列表框
  • 让lua脚本等待/暂停/睡眠/阻塞几秒钟的最简单方法?

    我不知道如何让 lua 执行任何常见的计时技巧 例如 sleep 停止线程上的所有操作 暂停 等待 不要继续下一个 命令 但允许其他代码 申请继续 阻止 不要继续执行下一个命令 直到 当前返回 我读过 while os clock
  • 如何在 Swift 中使用 NSURLSessionDataTask [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 有人能帮我吗 我找不到完成语法的好例子 var url NSURL NSURL URLWithString https itunes app
  • 反射:如何使用参数调用方法

    我试图通过带有参数的反射来调用方法 我得到 对象与目标类型不匹配 如果我调用一个不带参数的方法 它工作得很好 如果我调用该方法 则基于以下代码Test TestNoParameters 效果很好 但是如果我打电话Test Run 我得到一个
  • 合并 2 个分支时 Xcode 6.0.1 崩溃

    每次我尝试将一个分支合并到另一个分支时 Xcode 6 0 1 都会崩溃 到目前为止我有 尝试从另一台计算机合并相同的分支 显然之前推送和拉动它们 但它仍然崩溃 从 错误分支 创建一个新分支 在其中添加一个空格 并将其成功合并回 错误分支
  • 如何从 Objective-C 中的其他类访问 IBOutlet?

    我如何访问IBOutlets是在另一个类中创建的吗 例如 如果我有一个IBOutlet in Class A我怎样才能访问Class B 如果我无法访问IBOutlets来自其他课程的解决方法是什么 你需要让你的IBOutlet a pro
  • 获取存储在 React Native 文档目录中的文件名数组

    CASE 我已将音频文件下载到名为 tracks 的文件夹下的文档目录 如下所示 RNFetchBlob fs dirs DocumentDir tracks 毫无疑问 我可以按每个音频的名称来阅读它们 RNFetchBlob fs dir
  • 更新 Android Studio 3.1 后,发布签名的 APK 时出现错误

    将我现有的项目迁移到 Android Studio 3 1 后 它无法编译 以下是日志详细信息 org gradle api tasks TaskExecutionException 任务 app mergeReleaseResources
  • Facebook 喜欢视频自动播放和暂停

    在我的网站上有一个包含许多视频的页面 当 iframe 视频在视口中完全可见时 视频应自动播放 当视频移动到视口上方时 视频应该暂停 就像我们在 Facebook 中看到的那样 Note 我在用着iframe 但不是html5视频元素 虽然
  • 在 vanilla JS 中触发 Enter 按键

    我试图在我的输入上触发输入按键事件 而无需实际按下输入键 更多的是加载 我发现初始化键盘事件 https developer mozilla org en US docs Web API KeyboardEvent initKeyboard
  • Matplotlib:如何在 x 轴上绘制带有分类数据的线?

    我正在尝试绘制几行 不是条形图 如这个案例 https stackoverflow com questions 7559242 matplotlib strings as labels on x axis 我的 y 值是float 而 x
  • NSNotification:对象属性必须是 self 吗?

    到目前为止 我一直在使用 NSNotificationCenter 的方法postNotification aString object anyObjectOfInterestForTheReceiver 但最近我在文档中读到object字
  • 如何在Asp.net Core中获取用户浏览器名称( user-agent )?

    您能让我知道如何获取客户端在 MVC 6 ASP NET 5 中使用的浏览器名称吗 我认为这是一件容易的事 得到了答案Request Headers User Agent ToString
  • 如何使用 SQL Server 解析嵌套 JSON 数组

    我目前能够使用 SQL Server 解析 JSON 文件的大部分内容OPENJSON WITH 句法 但是 这个特定文件包含我不知道如何处理的嵌套数组 我读到的许多示例都将 JSON 引用为变量 在这种情况下 我调用一个文件 select