sql - 使用 UNION ALL 的嵌套查询的 SQL JSON 对象返回字符串
问题描述
我需要关于使用 UNION ALL 创建 SQL json 嵌套对象的帮助,我有嵌套查询,我想使用 union all 将一些默认对象传递给查询,但目前它返回嵌套查询的字符串对象。
这是我的查询
Select * from (
SELECT 'Id'= ent.categoryid ,
'Text'= ent.catname ,
ques = json_query(
(
SELECT *
FROM (
SELECT 'Id'= q.qid,
'Text'= q.questext
FROM chatfaqquestionnaire q
WHERE q.categoryid = ent.categoryid
UNION ALL
SELECT top 1
'Id'= 100000,
'Text'='Talk to Agent'
From [mChatCategory] ent1 where ent1.CategoryId=ent.CategoryId
) AS t FOR json auto ) )
FROM [mChatCategory] ent
Union All
SELECT top 1
'Id'=100000 ,
'Text'='Talk to Agent',
ques=null
from [mChatCategory] ent
) AS L1 FOR json auto
并返回 json 对象如下
[{"Id":1,"Text":"Food Safety","ques":"[{\"Id\":100000,\"Text\":\"Talk to Agent\"}]"},{"Id":2,"Text":"Permit Releted","ques":"[{\"Id\":1,\"Text\":\"Permit not renewed\\r\\n\"},{\"Id\":2,\"Text\":\"Payment issue\"},{\"Id\":100000,\"Text\":\"Talk to Agent\"}]"}]
对于 ques 嵌套对象,格式错误。预期输出:
[{"Id":1,"Text":"Food Safety","ques":[{"Id":100000,"Text":"Talk to Agent"}]},{"Id":2,"Text":"Permit Releted","ques":[{"Id":1,"Text":"Permit not renewed\r\n"},{"Id":2,"Text":"Payment issue"},{"Id":100000,"Text":"Talk to Agent"}]}]
请帮我解决一下这个。
解决方案
当您使用 时FOR JSON AUTO
,JSON
文本被转义。您可以尝试JSON_QUERY
再次使用来解决此问题。
从文档:
没有可选第二个参数的 JSON_QUERY 只返回第一个参数作为结果。由于 JSON_QUERY 总是返回有效的 JSON,FOR JSON 知道这个结果不必被转义。
Select Id, Text, JSON_QUERY(ques) AS ques
from (
SELECT 'Id'= ent.categoryid ,
'Text'= ent.catname ,
ques = json_query(
(
SELECT *
FROM (
SELECT 'Id'= q.qid,
'Text'= q.questext
FROM chatfaqquestionnaire q
WHERE q.categoryid = ent.categoryid
UNION ALL
SELECT top 1
'Id'= 100000,
'Text'='Talk to Agent'
From [mChatCategory] ent1 where ent1.CategoryId=ent.CategoryId
) AS t FOR json auto ) )
FROM [mChatCategory] ent
Union All
SELECT top 1
'Id'=100000 ,
'Text'='Talk to Agent',
ques=null
from [mChatCategory] ent
) AS L1 FOR json auto
推荐阅读
- laravel - 试图获取图像的非对象属性
- express - 如何在 auth0 身份验证中处理不同的用户类型?
- python - 在电视节目中返回的照片格式
- javascript - 如何处理 PHP 结果?
- ios - 我收到消息 =“ADMIN_ONLY_OPERATION”的运行时错误;在使用下面的代码时
- gcc - 为什么 gcc 会生成没有标志 -fno-pie 的奇怪代码?
- javascript - 如何在模板引擎中使用 getter 方法?
- jenkins - 通过 Jenkins 管道部署 aws ecs 时如何处理错误?
- django - 在 inlineformset 中编辑时如何防止为现有对象创建新对象?
- g1ant - 是否可以使用 ui 自动化自行控制 G1ANT 软件?