我需要使用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\"}]"}]
对于查询嵌套对象,格式错误。 预期输出:
[{"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"}]}]
请帮助我。
答案 0 :(得分:1)
使用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