T-SQL JSON 嵌套到数组中的路径
T-SQL JSON path nested into array
我正在思考一些(我认为很愚蠢的)T-SQL 代码段。
使用一些 SQL 数据,我正在创建一个 HTTP 请求正文来执行 API 调用,我知道 T-SQL/SQL 不是执行这些操作的方法。但是我配置的应用程序没有选项。
查询(用“0 = 0”大小写等虚构):
DECLARE @body VARCHAR(MAX)
SET @body = (
SELECT TOP 1
CASE WHEN 0 = 0 THEN 'OUTBOUND' ELSE 'INBOUND' END AS direction,
CASE WHEN 0 = 0 THEN CAST('true' AS BIT) ELSE CAST('false' AS BIT) END AS isAlone,
CASE WHEN 0 = 0 THEN
'AB123'
END AS Registration
FROM table
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
)
SELECT @body
这很好地吐出一个JSON:
{
"direction": "OUTBOUND",
"isAlone": true,
"Registration": "AB123"
}
到目前为止一切顺利。但是我正在与之交谈的 API 需要以下“注册”键:
{
"direction": "OUTBOUND",
"isAlone": true,
"Registration": [
"AB123"
]
}
所以我需要将“Registration”的值包装在一个数组中。
我尝试过:
- 执行字符串操作 (+ '[' +)
- @body
外部应用
- 子字符串(SELECT 来自 JSON 路径)
不知怎么的,我不知道如何才能完成这项工作。你们能把我推向正确的方向吗?
共同感谢!
如果您在没有路径的情况下使用 JSON_QUERY,它会告诉 SQL 将字符串视为 JSON,因此 FOR JSON PATH
不会影响格式。记录了行为 here
使用 JSON_QUERY()
本机创建 JSON 数组列
CREATE TABLE #test (direction Varchar(100),isAlone bit,Registration Varchar(100))
INSERT INTO #test
VALUES ('OUTBOUND',1,'AB123')
DECLARE @body VARCHAR(1000) = (
SELECT direction
,isAlone
,Registration = JSON_QUERY(CONCAT('["',registration,'"]'))
FROM #test
FOR JSON PATH,WITHOUT_ARRAY_WRAPPER
)
SELECT @body
我正在思考一些(我认为很愚蠢的)T-SQL 代码段。 使用一些 SQL 数据,我正在创建一个 HTTP 请求正文来执行 API 调用,我知道 T-SQL/SQL 不是执行这些操作的方法。但是我配置的应用程序没有选项。
查询(用“0 = 0”大小写等虚构):
DECLARE @body VARCHAR(MAX)
SET @body = (
SELECT TOP 1
CASE WHEN 0 = 0 THEN 'OUTBOUND' ELSE 'INBOUND' END AS direction,
CASE WHEN 0 = 0 THEN CAST('true' AS BIT) ELSE CAST('false' AS BIT) END AS isAlone,
CASE WHEN 0 = 0 THEN
'AB123'
END AS Registration
FROM table
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
)
SELECT @body
这很好地吐出一个JSON:
{
"direction": "OUTBOUND",
"isAlone": true,
"Registration": "AB123"
}
到目前为止一切顺利。但是我正在与之交谈的 API 需要以下“注册”键:
{
"direction": "OUTBOUND",
"isAlone": true,
"Registration": [
"AB123"
]
}
所以我需要将“Registration”的值包装在一个数组中。
我尝试过:
- 执行字符串操作 (+ '[' +)
- @body 外部应用
- 子字符串(SELECT 来自 JSON 路径)
不知怎么的,我不知道如何才能完成这项工作。你们能把我推向正确的方向吗?
共同感谢!
如果您在没有路径的情况下使用 JSON_QUERY,它会告诉 SQL 将字符串视为 JSON,因此 FOR JSON PATH
不会影响格式。记录了行为 here
使用 JSON_QUERY()
本机创建 JSON 数组列CREATE TABLE #test (direction Varchar(100),isAlone bit,Registration Varchar(100))
INSERT INTO #test
VALUES ('OUTBOUND',1,'AB123')
DECLARE @body VARCHAR(1000) = (
SELECT direction
,isAlone
,Registration = JSON_QUERY(CONCAT('["',registration,'"]'))
FROM #test
FOR JSON PATH,WITHOUT_ARRAY_WRAPPER
)
SELECT @body