从nvarchar返回JSON对象

从nvarchar返回JSON对象,json,sql-server,tsql,azure-sql-database,Json,Sql Server,Tsql,Azure Sql Database,我在Azure Sql中有下表: CREATE TABLE [dbo].[MyTable] ( [Id] NVARCHAR(20) NOT NULL PRIMARY KEY, [JsonData] NVARCHAR(MAX) NULL ) 使用示例数据: INSERT INTO [dbo].[MyTable] VALUES ('abc', '{ "key1": 1, "key2" : "val1" }') 现在我想返回格式正确的json对象数组。我尝试了以下几点: SELECT i

我在Azure Sql中有下表:

CREATE TABLE [dbo].[MyTable]
(
  [Id] NVARCHAR(20) NOT NULL PRIMARY KEY, 
  [JsonData] NVARCHAR(MAX) NULL
)
使用示例数据:

INSERT INTO [dbo].[MyTable] VALUES ('abc', '{ "key1": 1, "key2" : "val1" }')
现在我想返回格式正确的json对象数组。我尝试了以下几点:

SELECT id, jsonData  [md].[MyTable] 
FOR JSON AUTO 
但这会将json字段作为字符串返回:

{"deviceid":"abc", "jsonData" : "{ \"key1\": 1, \"key2\" : \"val1\" }" }
Aa您可以看到jsonData不是一个对象,它是一个带escape\”的字符串,而我需要:

{"deviceid":"abc", "jsonData" : { "key1": 1, "key2" : "val1" } }

您需要将
FOR JSON
JSON_QUERY()
一起使用,如(JSON_QUERY返回有效的JSON片段。因此,FOR JSON不会在JSON_QUERY返回值中转义特殊字符):


FOR JSON AUTO
将结果转换为JSON,它不假设它们包含JSON数据。它会看到一个
jsonData
字段,其中包含一个需要转义的字符串。是的,我注意到了。但是我需要一个根据问题返回JSON的查询。检索到的字符串是JSON字符串,您可以在object、任何语言或sql t中转换它hen替换(json,'\','')
SELECT id, JSON_QUERY(jsonData) AS jsonData
FROM [MyTable] 
FOR JSON AUTO