如何构造单个JSON,其中column1是属性名称,column2是值

时间:2019-07-16 12:31:54

标签: json sql-server-2016

在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"
  }
]

1 个答案:

答案 0 :(得分:2)

不幸的是,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"}