在 SQL Server 2016 中将 JSON 转换为表

2023-12-24

我正在开发一个 Web 项目,其中客户端应用程序通过 JSON 与数据库进行通信。

最初的实现是在 SQL Server 2012 中进行的(不支持 JSON,因此我们实现了一个处理解析的存储函数),现在我们正在转向 2016(支持 JSON)。

到目前为止,我们已将处理时间缩短了很多(在某些情况下,速度快了 200 多倍!)。

有一些交互包含需要转换为表的数组。为了实现这一目标,OPENJSON函数确实ALMOST我们需要的。

在其中一些(基于数组的)情况下,数组中的记录具有一个或多个也是对象的字段(在这种特殊情况下,也是数组),例如:

    [{
        "Formal_Round_Method": "Floor",
        "Public_Round_Method": "Closest",
        "Formal_Precision": "3",
        "Public_Precision": "3",
        "Formal_Significant_Digits": "3",
        "Public_Significant_Digits": "3",
        "General_Comment": [{
            "Timestamp": "2018-07-16 09:19",
            "From": "1",
            "Type": "Routine_Report",
            "Body": "[To + Media + What]: Comment 1",
            "$$hashKey": "object:1848"
        }, {
            "Timestamp": "2018-07-16 09:19",
            "From": "1",
            "Type": "User_Comment",
            "Body": "[]: Comment 2",
            "$$hashKey": "object:1857"
        }, {
            "Timestamp": "2018-07-16 09:19",
            "From": "1",
            "Type": "Routine_Report",
            "Body": "[To + Media + What]: Comment 3",
            "$$hashKey": "object:1862"
        }]
    }, {
        "Formal_Round_Method": "Floor",
        "Public_Round_Method": "Closest",
        "Formal_Precision": "3",
        "Public_Precision": "3",
        "Formal_Significant_Digits": "3",
        "Public_Significant_Digits": "3",
        "General_Comment": []

    }]

Here, General_Comment也是一个数组。

运行命令时:

SELECT *
  FROM OPENJSON(@_l_Table_Data)
  WITH (    Formal_Round_Method                 NVARCHAR(16)    '$.Formal_Round_Method'               ,
            Public_Round_Method                 NVARCHAR(16)    '$.Public_Round_Method'               ,
            Formal_Precision                    INT             '$.Formal_Precision'                  ,
            Public_Precision                    INT             '$.Public_Precision'                  ,
            Formal_Significant_Digits           INT             '$.Formal_Significant_Digits'         ,
            Public_Significant_Digits           INT             '$.Public_Significant_Digits'         ,
            General_Comment                     NVARCHAR(4000)  '$.General_Comment'                   
        ) ;

[@_l_Table_Data是一个保存 JSON 字符串的变量]

我们正在获取专栏General_Comment = NULL即使其中有数据(至少在数组的第一个元素中)。

我想我应该对那些可能包含的列使用不同的语法OBJECTS并不是简单的价值观,但我不知道该语法应该是什么。


我找到了一个微软页面,确实解决了这个问题。

查询应如下所示:

SELECT *
  FROM OPENJSON(@_l_Table_Data)
  WITH (    Formal_Round_Method        NVARCHAR(16)    '$.Formal_Round_Method'               ,
            Public_Round_Method        NVARCHAR(16)    '$.Public_Round_Method'               ,
            Formal_Precision           INT             '$.Formal_Precision'                  ,
            Public_Precision           INT             '$.Public_Precision'                  ,
            Formal_Significant_Digits  INT             '$.Formal_Significant_Digits'         ,
            Public_Significant_Digits  INT             '$.Public_Significant_Digits'         ,
            General_Comment            NVARCHAR(MAX)   '$.General_Comment'   AS JSON                
    ) ;

所以,你需要添加AS JSON在列定义的末尾和(天知道为什么)类型MUST be NVARCHAR(MAX).

确实很简单!!!

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

在 SQL Server 2016 中将 JSON 转换为表 的相关文章

  • JSON 中的哈希到底是什么?

    我正在学习 JSON 但我发现你也可以将所谓的 哈希 放入 JSON 中 我在哪里可以找到什么是哈希 或者你能向我解释一下什么是哈希吗 另外 什么是哈希图 我有 C 和 C 经验 正在学习 JS Jquery 和 JSON 哈希是一个稀疏数
  • 意外的令牌:尝试解析 JSON 字符串时

    我正在尝试解析这个 JSON 字符串 RESULTS name Thessaloniki GR type Sailing l sailing weather beach Porto 20Carras 20Marina 45904 name
  • init 后用 JSON 填充 select2 不起作用

    我正在尝试使用 JSON 数组填充 select2 元素 但我无法得到它 我有下一个数组 data id Foo text Foo id Bar text Bar 我初始化 select2 如下 selectElement select2
  • Swift 3 中的 JSON 解析

    有没有人能够找到一种在 Swift 3 中解析 JSON 文件的方法 我已经能够返回数据 但在将数据分解为特定字段时我没有成功 我会发布示例代码 但我已经尝试了很多不同的方法但没有成功 并且没有保存任何代码 我想要解析的基本格式是这样的 提
  • 用于检查 Apache Camel XML 中字符串的 JSONPath 表达式

    假设我有一个简单的 json 文件 如下所示 log host blah severity INFO system 1 我正在使用 Apache Camel 它是 Spring XML 来处理和路由 json 文件 我的路由代码看起来像这样
  • Postgres JSON 数据类型 Rails 查询

    我正在使用 Postgres 的 json 数据类型 但想要使用嵌套在 json 中的数据进行查询 排序 我想在 json 数据类型上使用 where 进行订购或查询 例如 我想查询关注者数量 gt 500 的用户 或者我想按关注者或关注数
  • Azure 应用服务在配置中添加字符串数组

    Net core 应用程序并在 Azure 应用服务中部署该应用程序 在我的应用程序中 我有一个包含以下内容的应用程序 settings json 文件 Roles Roles Admins Users 我的 ARM 模板中有以下配置 参数
  • 处理 fanart.tv Web 服务响应 JSON 和 C#

    我正在尝试使用 fanart tv Webservice API 但有几个问题 我正在使用 Json Net Newtonsoft Json 并通过其他 Web 服务将 JSON 响应直接反序列化为 C 对象 这里的问题是元素名称正在更改
  • Kubernetes / kubectl - “必须指定容器名称”,但看起来确实如此?

    我正在调试 kubectl 的日志输出 其中指出 Error from server BadRequest a container name must be specified for pod postgres operator 49202
  • 如何将此数据编码为 JSON 中的父/子结构

    我正在使用 d3 js 将动物 有机体 家族 一次最多 4000 个 可视化为树形图 尽管数据源也可以是目录列表或命名空间对象列表 我的数据如下 json organisms name Hemiptera Miridae Kanakamir
  • 如何在golang中解析JSON而不需要解组两次

    我有一个 Web 套接字连接 它在 JSON 对象中发送不同类型的消息 并且我想将内容解组到一些已知的结构中 为此 我认为我应该执行以下操作 步骤 1 将 JSON 解组为通用映射 字符串 接口 步骤 2 找到我要找的钥匙 步骤 3 尝试将
  • 根据 .NET Core 2.1 中的更改重新加载 Serilog JSON 配置

    我目前正在开发 ASP NET Core 2 1 应用程序 并使用 Serilog 进行日志记录 我想在运行时为我的 Serilog 实现重新加载应用程序设置文件 我的目标是在运行时更改日志级别 例如我写入minimumLevelDebug
  • 包含 contains 的 json 格式查询

    我在 ansible 中有以下 json 输出 active transaction null cores 4 hostname alpha auth wb01 active transaction null cores 4 hostnam
  • 如何舍入、取整、取整、截断

    如何对 jq jq 1 5 1 a5b5cbe 中的数字进行舍入 取整 取整和截断 例如 与 mass 188 72 我想 mass 188 有地板 mass 189 与天花板和圆形 舍入示例 5 52 gt 6 5 50 gt 5 or
  • Haskell Data.Decimal 作为 Aeson 类型

    是否可以解析一个数据 十进制 https hackage haskell org package Decimal 0 4 2 docs Data Decimal html使用 Aeson 包从 JSON 获取 假设我有以下 JSON foo
  • 从 php 到 JavaScript 的数组

    我正在尝试使用 json 将数组列表从 php 传输到 javascript 但它不起作用 JS ajax url getProfilePhotos php type post post or get method data if you
  • 在单行上获取 jq 的输出

    我使用以下输出 https stackoverflow com a 40330344 https stackoverflow com a 40330344 issues key status fields status name assig
  • 无法将数据加载到 mvc 4 中的 jTable 中

    好的 我第一次尝试 jTable 我可以加载表 但这对我没有什么好处 因为它不会加载我的任何数据 当我调试程序时 我想要的表中的所有行都存储在我的列表中 因此我很困惑为什么当我运行应用程序时会弹出一个对话框 显示 与服务器通信时发生错误 H
  • shell-out 值到 md5(加密)函数

    我正在寻找一种解决方案 我正在构建 JSON 记录 并需要在 JQ 中生成一些文本 但将此文本通过管道传输到 MD5 求和函数并将其用作键的值 echo first John last Big jq id first last md5 通过
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户

随机推荐

  • 在 VB.NET for WinForms 中启用禁用文本框中的滚动条

    我试图允许在多行文本框中滚动 即使文本框设置为 textbox Enabled False 这是不可能的 因为滚动条被禁用Enabled 指挥也是如此 这里默认的解决方案是设置 textbox ReadOnly True textbox E
  • 在哪里查找 cocoa / cocoa touch 中使用的日期格式说明符?

    例如 dateFormatter setDateFormat yyyy MM DD HH mm ss 我想某个地方有一个列表显示了所有这些日期格式说明符 但找不到任何 NSDateFormatter 文档似乎没有提到这些 It uses U
  • JSF - Primefaces FileUpload 不触发方法[重复]

    这个问题在这里已经有答案了 我搜索并尝试了我在网上找到的每个示例 但我的示例仍然不起作用 我的 web xml 标题
  • 如何将 ASP.NET Core SignalR 与 Pace.js 结合使用

    我有一个 ASP NET Core 2 2 MVC 项目 该项目启用了 HTTPS 并且面向 Docker Linux 容器 我已遵循以下位置的所有说明在我的项目中启用 SignalR 当项目运行时 我看到以下与 SignalR 相关的日志
  • 处理多个 CSS 样式表的有效方法是什么?

    有不同的网站共享几乎相同的布局 但风格不同 一个很好的例子是考虑 stackexchange 网络中的所有站点 它们都有相似的布局 但外观和感觉不同 考虑 5 个站点 对于每个站点 如果我们必须为不同的浏览器维护 3 到 4 个样式表 那么
  • spring:接收类列表的 bean

    我想在 Spring XML 上下文中定义一个具有类列表类型属性的 bean 即List
  • MATLAB - 根据某些标准提取表中选定的行

    假设我有一个这样的表 post user date 1 A 12 01 2014 13 05 2 B 15 01 2014 20 17 3 A 16 01 2014 05 22 我想创建一个较小的表 但不删除原始表 其中包含 例如 用户 A
  • ASP.NET 和 C# 页面查看计数器:使用数据库

    我正在开发一个类似于 stackoverflow com 概念的项目 会有很多问题 我希望每个问题都有一个页面浏览计数器 我觉得最好的方法是使用数据库 因为问题的数量会很大 而且会随着时间的推移而增加 如果我只创建一个表 那就很容易了问题
  • 虚拟调度实施细节

    首先 我想明确的是我确实明白 C 标准中没有 vtable 和 vptrs 的概念 然而 我认为几乎所有实现都以几乎相同的方式实现虚拟调度机制 如果我错了 请纠正我 但这不是主要问题 另外 我相信我知道虚拟函数是如何工作的 也就是说 我总是
  • Visual Studio Code - C# 控制台应用程序

    可能是重复或非常基本的问题 我最近在 Windows 上下载了 Visual Studio Code 并尝试打开现有的 Hello World 控制台应用程序 我已经下载了相同的 C 扩展 您能否指出我可以在其中找到配置 VS Code 的
  • JQuery 改变表格单元格的内容

    好的 这是一个令人尴尬地简单的问题 为什么下面的 jQuery 示例不起作用 显然应该将表中的 a 更改为 hello HTML 代码 table tr td a td td b td tr table JavaScript JQuery
  • 如何在 .net 中以 4-2-2 格式保存高质量的 jpeg?

    当我使用 bitmap save 保存 jpg 文件时 当我指定编码器和质量时 它会保存为 jpeg 4 1 1 但当我不指定编码器和质量时 它会保存为 4 2 2 我想将其保存为 4 2 2 其质量比默认值更高 使用 bitmap sav
  • /usr/local/bin 和 /usr/local/share 的权限问题

    我在新的 MacBook 上使用 OS X Yosemite 刚刚安装了 Homebrew 和一些必需的软件包 最近搬到了这台新计算机 我注意到偶尔当我安装新的brew 软件包时出现链接错误 由于某种原因 权限 usr local bin
  • JS Cookie 设置在 2 个位置,不会覆盖第一个设置

    我在两个不同的页面上使用相同的脚本来设置相同的 cookie 我的假设是 即使两个页面的路径 略有不同 它们也会简单地覆盖 cookie 而不是复制其中的条目 我的第一页的路径是 example com classifieds busine
  • Java 内存使用情况

    我无法理解 Java 内存的使用情况 我有一个应用程序 其最大内存大小设置为 256M 然而 在某个时间点 我可以看到根据任务管理器 它占用了 700MB 不用说 当发生这种情况时 所有其余的应用程序都会有点反应迟钝 因为它们可能已被换出
  • 为什么这个 SVG 的宽度没有用 ng-attr-width 设置?

    我有一个非常简单的网页来尝试隔离我不理解的 ng 绑定 div div
  • 如何保存完整的网页

    有没有办法使用WebDriver保存完整的网页 目前我执行 getPageSource 然后将所有内容放入 html 本地文件中 但保存的页面形状不佳 奇怪的字符 没有图像 所有元素向下偏移 请参阅下面我使用的代码 Test public
  • 是否可以将我们的对称算法添加到 OpenSSL 中?

    我想将我的对称加密算法添加到 OpenSSL 中 并将其用作 SSL 协议中的对称算法 我需要使用测试它s client 所以我需要一种方式来表示 OpenSSL 将其用作对称算法 OpenSSL 使用 RSA 进行密钥交换阶段就足够了 我
  • 为动态创建的面板添加鼠标单击事件[重复]

    这个问题在这里已经有答案了 您好 我正在用 C 开发一个 Windows 窗体应用程序 我有一个 FlowLayoutPanel 里面有一个动态面板列表 如何为 FlowLayoutPanel 内的面板添加鼠标单击事件 谢谢这个 但是我可以
  • 在 SQL Server 2016 中将 JSON 转换为表

    我正在开发一个 Web 项目 其中客户端应用程序通过 JSON 与数据库进行通信 最初的实现是在 SQL Server 2012 中进行的 不支持 JSON 因此我们实现了一个处理解析的存储函数 现在我们正在转向 2016 支持 JSON