如何使用 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 数组 的相关文章

  • 如何在NiFi中映射流文件中的列数据?

    我有 csv 文件 其结构如下 Alfreds Centro Ernst Island Bacchus Germany Mexico Austria UK Canada 01 02 03 04 05 现在我必须将这些数据移入数据库 如下所示
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • JavaScript 相对路径

    在第一个 html 文件中 我使用了一个变量类别链接 var categoryLinks Career prospects http localhost Landa DirectManagers 511 HelenaChechik Dim0
  • Android REST API 连接

    我有点傻 对此感到抱歉 我编写了一个 API 它返回一些 JSON 我的目标是从 Android 应用程序使用此 API 我已经尝试过使用 AsyncTask 但失败了 我想像这样使用它 调用该类 告知 URL 和结果的类型 哪个json
  • 将 `new Date ()` 存储在 JSON 对象中

    我有以下字段验证器对象 type date min new Date 我希望我可以存储new Date 作为 JSON 中的表达式 解析时会执行 保存时间戳 type date min new Date getTime 然后你再读一遍 va
  • 将嵌套数组中的“点符号”键扩展到子数组

    我从某个任意深度的嵌套数组开始 在该数组中 一些键是一系列由点分隔的标记 例如 billingAddress street 或 foo bar baz 我想将这些键控元素扩展到数组 因此结果是一个嵌套数组 其中所有这些键都已扩展 例如 bi
  • 熊猫:什么是视图?

    请帮助我理解 什么是view在熊猫中 我知道如果我们改变一些东西view我们总是对原始对象进行更改 但物体的视图和原始物体有不同id s例如 这是否意味着view是另一个对象引用原始对象吗 机制是什么 我尝试过但找不到解释 import p
  • 如何从 SQL Server 存储过程返回值并在 Access VBA 中使用它们

    我已经在 SQL Server 中设置了一个运行良好的存储过程 我现在可以从 VBA 调用它 但想返回一个值以了解是否存在任何错误等 我的 SP 中的最后一个参数设置为 OUTPUT DataSetID int 0 Destination
  • 将 JSON 文件读入 Spark 时出现 _corrupt_record 错误

    我有这个 JSON 文件 a 1 b 2 这是通过Python json dump方法获得的 现在 我想使用 pyspark 将此文件读入 Spark 中的 DataFrame 根据文档 我正在这样做 sc SparkContext sql
  • 如何连接sql中具有相同值但在同一个表的不同列中的行?

    我正在尝试合并来自不同列的具有相同值的数据 并且仅停止显示没有连接值的记录 例如我有 ID TaxDecNo PrevTaxDec 1 5374 11135 2 9864 7394 3 11135 21784 4 7394 6872 5 2
  • 最好的 php DOM 2 数组函数是什么?

    我想解析xml文件 到目前为止 我发现最好的方法是使用 DOMDocument 类 示例 xml 字符串
  • 用户输入数组大小 C [重复]

    这个问题在这里已经有答案了 编写一个程序 要求用户输入数组大小 n 的值 并用 n 个整数填充数组 然后反转数组并将其打印在屏幕上 我正在使用 Visual Studio 并到目前为止 我在 int arr1 size 中遇到 size 问
  • Swift - 如何复制包含引用类型的数组

    我正在尝试复制数组及其值 为什么两个数组都引用同一个变量 您可以在 Playground 中尝试此操作 var view UIView view tag 1 var a UIView var b UIView a append view b
  • 插入后,数据库中仅插入“字符串”的一个字符

    Below is my table screenshot Data after insertion C 代码 SqlConnection con new SqlConnection connectionsession Con con Ope
  • 改造2:使用json对象发送文件

    我在请求正文中发送对象 如下所示 title test description test images POST create data Call
  • MySQL 8 用逗号分割字符串并将其转换为JSON ARRAY

    我有以下字符串 a b c d 我想将它转换成一个 json 数组 像这样 a b c d MySQL 8 有什么函数可以实现这个功能吗 Try SELECT CAST CONCAT REPLACE a b c d AS JSON See
  • 数组所有可能的组合

    我有一个字符串数组 ted williams golden voice radio 我希望这些关键字的所有可能组合采用以下形式 ted williams golden voice radio ted williams ted golden
  • VSTS部署IIS应用程序winrm并更改appsettings.json

    我正在使用 部署 IIS 应用程序 winrm 任务在另一台计算机上部署 IIS 应用程序 此任务部署 zip 文件 在此 zip 中有一个 appsettings json 其变量以下划线开头和结尾 我需要替换每个环境的 appsetti

随机推荐

  • 同一 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