多个 SELECT 语句合并到一个 JSON 中

2023-12-14

我确信这个问题必须在某个地方得到回答,但在我的一生中,无论我如何改变我的搜索短语,我似乎都找不到任何东西。

我需要从两个完全独立的表中选择数据并将信息导出到 JSON。在这种情况下,它们在每个表中都是 1 条记录。

如果我一次只选择 1 条并导出到 JSON,则它们是 1 条记录,但是当我在 SQL 中连接两条记录然后导出到 JSON 时,它们是 1 条记录数组。

只需 1 条记录 SQL 输入:

DECLARE @Json nvarchar(max) = 
(   
    SELECT 'Data1' AS [Data1], 'Data2' AS [Data2]

    FOR JSON PATH
    , INCLUDE_NULL_VALUES
    , WITHOUT_ARRAY_WRAPPER
);

SELECT @Json;
GO

只有 1 条记录 JSON 输出(注意没有数组):

{
  "Data1": "Data1",
  "Data2": "Data2"
}

2记录SQL输入:

DECLARE @Json nvarchar(max) = 
(   
    SELECT
    (
        SELECT 'Data1' AS [Data1], 'Data2' AS [Data2]

        FOR JSON PATH
        , INCLUDE_NULL_VALUES
    ) AS [Part1]
    ,
    (
        SELECT 'Text1' AS [Text1], 'Text2' AS [Text2]

        FOR JSON PATH
        , INCLUDE_NULL_VALUES
    ) AS [Part2]

    FOR JSON PATH
    , WITHOUT_ARRAY_WRAPPER
);

SELECT @Json;
GO

2记录JSON输出(注意包含数组):

{
  "Part1": [
    {
      "Data1": "Data1",
      "Data2": "Data2"
    }
  ],
  "Part2": [
    {
      "Text1": "Text1",
      "Text2": "Text2"
    }
  ]
}

我“认为”WITHOUT_ARRAY_WRAPPER 是要添加的正确属性,它将解决此问题,但一旦添加该属性,我就会将整个记录作为字符串获取:

{
  "Part1": "{\"Data1\":\"Data1\",\"Data2\":\"Data2\"}",
  "Part2": "{\"Text1\":\"Text1\",\"Text2\":\"Text2\"}"
}

我知道我可以使用一些文本操作方法来使其工作,但我希望有一个干净的 SQL > JSON 语句。

我目前正在研究SQL Server 2016但如果有必要的话我可以得到一个2017 or 2019服务器。不确定以后的 SQL 是否可以更好地处理这个问题,或者是否只是我的查询需要优化。

编辑:我想要的输出是:

{
  "Part1": {
      "Data1": "Data1",
      "Data2": "Data2"
    },
  "Part2": {
      "Text1": "Text1",
      "Text2": "Text2"
    }
}

根据已接受的答案对于 JSON 路径。如何不使用转义字符在 MSDN 上的 SQL Server 论坛上:

FOR JSON 将对任何文本进行转义,除非它是由某些 JSON 函数/查询生成为 JSON 结果的。在您的示例中,FOR JSON 无法知道您是否真的想要原始 JSON,或者您只是发送一些看起来像 JSON 的自由文本。

正确定义的 JSON 是使用 FOR JSON(除非它具有WITHOUT_ARRAY_WRAPPER 选项)或 JSON_QUERY 生成的。如果用 JSON_QUERY 包装 JSON 文字,它将不会被转义。

这个答案让我尝试以下代码:

DECLARE @Json nvarchar(max) = 
(
    SELECT
     JSON_QUERY((
        SELECT 'Data1' AS [Data1], 'Data2' AS [Data2]

        FOR JSON PATH
        , INCLUDE_NULL_VALUES
        , WITHOUT_ARRAY_WRAPPER
    )) AS [Part1]
    ,
    JSON_QUERY((
        SELECT 'Text1' AS [Text1], 'Text2' AS [Text2]

        FOR JSON PATH
        , INCLUDE_NULL_VALUES
        , WITHOUT_ARRAY_WRAPPER
    )) AS [Part2]

    FOR JSON PATH
    , WITHOUT_ARRAY_WRAPPER
);

SELECT @Json;

事实证明——这就像一种魅力。结果:

{
    "Part1": {
        "Data1": "Data1",
        "Data2": "Data2"
    },
    "Part2": {
        "Text1": "Text1",
        "Text2": "Text2"
    }
}

DB<>Fiddle


Update看看我发现埋了什么官方文档:

为了避免自动转义,请使用 JSON_QUERY 函数提供 newValue。 JSON_MODIFY 知道 JSON_MODIFY 返回的值是格式正确的 JSON,因此它不会转义该值。

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

多个 SELECT 语句合并到一个 JSON 中 的相关文章

  • 数据库设计1对1关系

    我的数据库设计不正确 我应该在开发过程中解决这个问题吗 假定 user 表与 userprofile 表具有 1 1 关系 然而 实际设计中 用户 表与 用户配置文件 表具有 1 关系 一切正常 但无论如何应该修复它吗 做一件事 User
  • ActiveSupport::JSON 解码哈希丢失符号

    我正在尝试序列化和反序列化哈希 当散列被解除序列化时 密钥被解除符号化 例如不是更多 一 而是 一 从 Rails 控制台 gt gt h one gt 1 two gt two one gt 1 two gt two gt gt j Ac
  • 如何对 JSON 对象进行加密哈希?

    下面的问题比乍看起来更复杂 假设我有一个任意 JSON 对象 该对象可能包含任意数量的数据 包括其他嵌套的 JSON 对象 我想要的是 JSON 数据的加密哈希 摘要 而不考虑实际的 JSON 格式本身 例如 忽略换行符和 JSON 令牌之
  • Facebook Graph API 使用 json 和 C# 检索好友

    我正在使用 C 和 Graph API 进行工作 并且能够获取 Facebook 用户个人资料信息 例如 ID 姓名和电子邮件 然后反序列化 JSON 以便能够将值分配给标签 然而 我的问题是 当我去获取好友列表或任何与此相关的列表时 如何
  • 如何将多个数据系列导入 Highcharts

    以下代码有效 var options1 chart renderTo container1 series getJSON tokyo jsn function data options1 series 0 data data var cha
  • SQL Server 全文的自定义断字器

    有谁知道如何为 SQL Server 2005 创建自定义分词系统 我更喜欢用 C 编写它 我需要能够搜索 c f 等术语 但 字符是英语 英国 分词器组件中的分词器 不能以任何其他方式更改 我发现以下文章提供了不完整的示例 缺少 IWor
  • 如何检查Azure SQL数据库中是否已存在数据库用户

    我的新客户计划使用 Azure 托管 SQL 数据库服务 我正在使用 dacpac 来部署数据库 在 dacpac 中 我有一个部署后脚本 用于创建 sql 用户 如下所示 IF NOT EXISTS SELECT name FROM sy
  • 使用 JSON 传递 HTML

    我正在使用 JSON 将数据传递到 iPhone 和 iPad 数据的一个字段是 HTML 问题是编码 这是我得到的回复 gt GadgetHTML strong Hello strong gt from Catworld br n img
  • 在sql server中动态生成列名

    请看下面的查询 select name as Employee Name from table name 我想生成 Employee Name 动态地基于其他列值 这是示例表 s dt dt01 dt02 dt03 2015 10 26 I
  • Ruby on Rails:如何使用 JSONPath 访问(并保存到数据库)JSON 数组中的嵌套对象/属性?

    我正在尝试将 JSON 对象数组中的数据播种到我的数据库中 我有两个单独的数据库表 属性和单位 一个属性有许多单位 我已经能够通过 API 请求 JSON 数据 然后将其播种到数据库 成功地对属性信息 属性模型 执行此操作 但是 Valua
  • 从另一个表中选择范围之间的记录

    我有两张桌子 比如说Table1 and Table2 Table1 ID RN 11 1 12 2 13 3 14 4 15 5 16 6 17 7 18 8 19 9 10 10 Table2 ID FromRN ToRN 1 1 3
  • 将 MS Access 连接到网络上的 SQL Server

    我在 Windows 服务器上安装了 SQL Server Express 我有 10 个人在本地 PC 上安装了 MS Access 2016 假设数据库非常小且简单 连接 SQL Server 最简单的方法是什么 简单的 ODBC 可以
  • 如何使用 JSON.NET 反序列化?

    如何设置 Newtonsoft Json net 将此文本反序列化为 NET 对象 US Hawaii GMT 10 00 Hawaii US Alaska GMT 09 00 Alaska 为了加分 这种结构在Json中叫什么 我尝试寻找
  • 在 Vue js 中获取 JSON 属性时出错

    我在使用 Vue js 时遇到了一个奇怪的行为 我进行 ajax 调用 将结果 一些 JSON 存储到名为 modello 的 Vue 数据属性中 lineaGialla selected false descrizione Questa
  • 需要在SQL Server 2012中自动递增字符串

    考虑 SQL Server 2012 中的表 789 0000000 上面的数字在 SQL Server 2012 中将被视为字符串 但每当我更新记录时 我都需要增加到 1 例如 当我更新记录 1 时 它应该增加到789 0000001 当
  • SQL Server 文本数据类型最大长度 = 65,535?

    我正在使用的软件使用文本字段来存储 XML 根据我的在线搜索 文本数据类型应该包含 2 31 1 个字符 目前 SQL Server 每次都会将 XML 截断为 65 535 个字符 我知道这是由 SQL Server 引起的 因为如果我直
  • 将文件和关联数据发布到 RESTful Web 服务(最好以 JSON 形式)

    在一个应用程序中 我正在开发 RESTful API 我们希望客户端以 JSON 形式发送数据 该应用程序的一部分要求客户端上传文件 通常是图像 以及有关图像的信息 我很难在单个请求中追踪这种情况是如何发生的 是否可以将文件数据 Base6
  • T-SQL - 是否有(免费)方法来比较两个表中的数据?

    I have table a and table b SQL Server 2008 两个表具有完全相同的架构 出于本问题的目的 请考虑table a 我的本地开发表 table b 实时表 我需要创建一个 SQL 脚本 包含UPDATE
  • 如何返回调用不同数据库中的存储过程的远程数据库名称?

    我在一个 SQL Server 2008 R2 上有许多不同的数据库 为了便于论证 我们将它们称为 DB A DB B 和 DB C 我被要求开发一个将存在于 DB A 上的存储过程 该存储过程将用于删除和创建索引 并在 DB A 的表中存
  • 如何读取FTL文件中的JSONArray?

    我在我的 Java 文件中硬编码了以下 JSON 对象 JSONObject notificationInfoJson new JSONObject notificationInfoJson put title Payment Receiv

随机推荐

  • Gem5 中与 ARM 裸机的 UART 通信

    我目前正在使用 Gem5 我必须通过 UART 从我的主机访问 ARMv8 裸机选项 所以我尝试了很多方法 但我还没有准备好 您能否让我知道 如何在裸机类型编程中将主机的串行端口映射到 ARMv8 的串行端口 任何帮助 将不胜感激 工作设置
  • 递归条件类型

    我想递归地映射一个对象 以便将对象中的原始值转换为其他类型 例如 我想要一个像这样的对象 const before a c b d 变成这样 const after a c Test b Test d Test 我还假设价值观不会Date
  • 服务器重新启动后重新启动 WCF 服务

    WCF 中是否有某种机制可用于 预启动 热身 托管在 IIS 中的 WCF 服务 类似于 SharePoint 网站的预热脚本 我遇到过这样的情况 服务器在夜间重新启动 第二天 WCF 服务启动时会出现很长的延迟 我无法更改使用这些服务的各
  • 如何在列表理解中设置局部变量?

    我有一个方法 它接受一个列表并返回一个对象 input a list returns an object def map to obj lst a list f lst return a list 0 if a list else None
  • 使用 C# 通过 SSH 隧道连接 MySQL

    我尝试使用 SSH 隧道通过 C 访问我的 MySQL 数据库 但出现异常 无法连接到任何指定的 MySQL 主机 我在这个的帮助下得到了这个代码 C 到 MySQL 服务器的 SSH 隧道 这是我的代码 PasswordConnectio
  • UIView拖动(图像和文本)

    当 UIView 有图像和文本时 是否可以在 iOS 屏幕上拖动 UIView 例如小卡片 您能给我指出类似 已解决 的主题吗 我还没有找到 根据 pepouze 的答案 这就是一个简洁的解决方案 测试过 有效 void touchesMo
  • 如何使用一个Python脚本运行另一个Python脚本并向其传递变量? [复制]

    这个问题在这里已经有答案了 我有一个 Python 脚本 我们就这样称呼它吧控制器 py 我想用控制器 py运行另一个 Python 脚本并向其传递多个变量 我们来调用第二个脚本分析器 py 在不导入的情况下执行此操作的最佳方法是什么分析器
  • 使用同一接口调用多个类

    我有一个像这样的界面 public interface IAddressProvider string GetAddress double lat double long 在我的消费类中 我想循环遍历具体的提供者 直到得到结果 例如 简化的
  • 使用 jQuery 动态隐藏表格行

    我正在尝试替换表行的背景颜色 每个部分都以相同的颜色开始 我通过以下代码实现了这一点 document ready function tbody tr row nth child even css background efefef 我还需
  • 在画布中制作可点击区域来更改图像

    请帮我 在下面的画布中创建可点击区域 我可以将 onmousedown 事件分配给该区域 我知道如何使用不可见的 DIV 来做到这一点 但我认为有一种我不知道的更优雅的方法可以在画布中做到这一点 当我单击其中一个区域时 想要将图像名称传递给
  • 使用 Nokogiri 解析大型 XML

    因此 我尝试使用 Nokogiri 解析 400k 多行 XML 文件 XML 文件具有以下基本格式
  • 在 Eclipse 中安装 ADT 时出现问题

    我已经安装了 SDK 现在需要 Eclipse 插件 但是 这是行不通的 它达到大约 25 29 并挂起几分钟 然后失败 我收到以下错误消息 收集要安装的项目会话时发生错误 上下文是 profile SDKProfile 阶段 org ec
  • 如何在其他地方绘制不可见的 JFrame?

    我想将 JFrame 的内容绘制到另一个框架上 目前 我只有在 JFrame 可见时才能使其工作 有没有办法绘制隐藏的 JFrame 附加信息 在我的项目中 我需要能够旋转和缩放窗口 我不想编写自己的 window api 所以我想我也许能
  • 即使应用程序被卸载后也能保留设备标识符

    在我的 iPhone iPad 应用程序的用例中 有一个投票系统 一台设备可以将其投票发送到服务器一次 因此我的服务器需要识别用户的设备 我不希望用户注册帐户 因为这会使应用程序变得复杂 但是 我找不到有效的解决方案 UDID 已弃用 我认
  • SUMIF 排除隐藏行。小计?求和?

    我有 2 个巨大的事件表 第一个表是数据表 tblData 包含日期 持续时间和代码 用于识别事件 第二个表是汇总表 tblSummary 每个事件花费的总时间 我该如何过滤tblData并更新tblSummary 下面是一小部分tblDa
  • android中按钮点击的表单验证

    我正在开发一个 Android 应用程序 其中登录活动有 editText RadioButton Spinner 和一个按钮 因此 当按下按钮时 我必须通过检查是否填写了所有字段来验证我的表单 否则会向谁能帮我写一下java代码吗 提前致
  • 使用 Android Gallery 作为自动幻灯片放映

    您好 我想为应用程序创建一个启动屏幕 并让图库在计时器上旋转多个图像 谁能告诉我如何使用计时器为图库中的图像设置动画 一个简单的解决方案是 private int PicPosition private Handler handler ne
  • 将社交分享链接添加到phonegap应用程序

    我有一个使用 jquery mobile 的应用程序 它输出和图像 现在我已经在预览页面中显示了图像 并且我在下面添加了链接以在 Facebook 和 Twitter 以及其他平台上分享它们 我该如何编码 当用户单击共享按钮时 默认共享面板
  • 表的奇数行和偶数行

    我有一个从 MYSQL 数据库获取其行的表 table table
  • 多个 SELECT 语句合并到一个 JSON 中

    我确信这个问题必须在某个地方得到回答 但在我的一生中 无论我如何改变我的搜索短语 我似乎都找不到任何东西 我需要从两个完全独立的表中选择数据并将信息导出到 JSON 在这种情况下 它们在每个表中都是 1 条记录 如果我一次只选择 1 条并导