【问题标题】:How to construct single JSON where column1 is property name and column2 is value如何构造单个 JSON,其中 column1 是属性名称,column2 是值
【发布时间】:2019-07-16 12:31:54
【问题描述】:

在 SQL Server 2016 + 中,如何转换如下所示的表:

+---------+----------+
|   Kee   |   Val    |
+---------+----------+
| aaaaaa  | 11111111 |
| bbbbbbb |  2222222 |
+---------+----------+

进入一个看起来像这样的对象:

{
  "aaaaaa": "11111111",
  "bbbbbbb": "2222222"
}

这是我尝试过的:

CREATE TABLE #tmp
(
    Kee VARCHAR(100),
    Val VARCHAR(100)
)
INSERT INTO #tmp
(
    Kee,
    Val
)
VALUES
('aaaaaa', '11111111'),
('bbbbbbb', '2222222')


SELECT t.Kee,
       t.Val
FROM #tmp AS t
FOR JSON AUTO
DROP TABLE #tmp

但它给出了:

[
  {
    "Kee": "aaaaaa",
    "Val": "11111111"
  },
  {
    "Kee": "bbbbbbb",
    "Val": "2222222"
  }
]

【问题讨论】:

  • 您要求的不是有效的 JSON。
  • @JAAulde 哎呀,错字,已修复,谢谢!

标签: json sql-server-2016


【解决方案1】:

不幸的是,SQL Server 的 Json 支持不是那么灵活。
您必须手动构建该 json,但使用基本的字符串连接技术非常简单。

2017 之前的版本使用 for xml pathstuff

SELECT STUFF(
    (
        SELECT '","'+ t.Kee +'":"'+ t.Val
        FROM #tmp AS t
        FOR XML PATH('')
    ), 1, 2, '{') + '}' As JsonResult

2017 年,SQL Server 终于引入了内置的 string_agg 函数,使得获得该结果所需的代码更加简单:

SELECT '{"' + STRING_AGG(t.Kee +'":"'+ t.Val, '","') +'"}'
FROM #tmp As t

结果(在这两种情况下):

{"aaaaaa":"11111111","bbbbbbb":"2222222"}     

【讨论】:

  • 你生成的 OP 要求的,但不是 有效的JSON。
  • 结构 ["key":"value"] 不是 JSON。 {"key":"value"} JSON
  • @JAAulde 你是对的 - 但正如你所写的,这是 OP 所要求的。如果需要,对代码进行简单的更改将提供一个有效的 json。 (只需将[ 更改为{ 并将] 更改为}。)
  • 伙计们,对不起,我输错了我的输出 JSON {"aaaaaa":"11111111","bbbbbbb":"2222222"} 是我要找的。谢谢!
  • @JAAulde 在 OP 编辑​​了问题后,我重新编辑了答案。
猜你喜欢
  • 2022-11-03
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多