将SQL Server的FOR JSON函数用于数字和JSON输入
我正在努力使用SQL Server的FOR JSON函数将SQL Server中包含数字数据和JSON格式字符串的单个表的内容合并到一个整合的JSON输出中 我主要遇到了转义字符的问题,将JSON和非JSON数据组合到JSON格式的SQL Server查询输出中似乎不是一种简单的方法。有人能给我举一个成功查询的例子吗 样本数据:将SQL Server的FOR JSON函数用于数字和JSON输入,sql,json,sql-server,Sql,Json,Sql Server,我正在努力使用SQL Server的FOR JSON函数将SQL Server中包含数字数据和JSON格式字符串的单个表的内容合并到一个整合的JSON输出中 我主要遇到了转义字符的问题,将JSON和非JSON数据组合到JSON格式的SQL Server查询输出中似乎不是一种简单的方法。有人能给我举一个成功查询的例子吗 样本数据: CREATE TABLE settings ( Id INT PRIMARY KEY NOT NULL, FileName nvarchar(max)
CREATE TABLE settings (
Id INT PRIMARY KEY NOT NULL,
FileName nvarchar(max) NOT NULL,
FilePath nvarchar(max) NOT NULL,
Date datetime NOT NULL,
Json nvarchar(max)
);
INSERT INTO settings
(
Id,
FileName,
FilePath,
Date,
Json
)
VALUES
(
1,
'contents.json',
'folder1/folder2/contents.json',
'2000-01-01T00:00:00.000',
'{
"A": 10,
"B": 20,
"C": {
"setting1": 30,
"setting2": 40,
"setting3": 50
},
"D": {
"setting1": 30,
"setting2": 40,
"setting3": 50
},
"E": true,
"F": false
"G": "John Doe"
}'
);
示例查询:
SELECT
FileName
, FilePath
, Id
, Date
, Json
FROM settings
FOR JSON AUTO;
预期产出:
[
{
"FileName": "contents.json",
"FilePath": "folder1/folder2/contents.json",
"Id": 1,
"Date": "2000-01-01T00:00:00.000",
"Json": [
{
"A": 10,
"B": 20,
"C": {
"setting1": 30,
"setting2": 40,
"setting3": 50
},
"D": {
"setting1": 30,
"setting2": 40,
"setting3": 50
},
"E": true,
"F": false
"G": "John Doe"
}
]
}
]
您的示例设置.Json无效:
"F": false
应该是:
"F": false,
解决该问题后,您可以将查询更改为嵌套Json的Json,如下所示:
选择
文件名
,文件路径
身份证件
日期
,[Json]=Json_Queryconcat'[',Json']
从设置
对于JSON AUTO;
结果如下:
[
{
"FileName": "contents.json",
"FilePath": "folder1\/folder2\/contents.json",
"Id": 1,
"Date": "2000-01-01T00:00:00",
"Json": [
{
"A": 10,
"B": 20,
"C": {
"setting1": 30,
"setting2": 40,
"setting3": 50
},
"D": {
"setting1": 30,
"setting2": 40,
"setting3": 50
},
"E": true,
"F": false,
"G": "John Doe"
}
]
}
]
请注意,SQL Server使用\/。在文件路径中转义了/个字符。请查看本文,如果转义字符有效,请删除JSon字符串中的转义字符。我相信在您的情况下,您需要检查json是否有效,然后才能自动应用json。还有一条类似的线索……谢谢@AlwaysLearning,我赶紧整理了我的示例数据。很抱歉。JSON_查询包装器是这一个上缺少的秘密酱汁。谢谢你的快速回复。