Вернуть JSON объект из nvarchar - PullRequest
       81

Вернуть JSON объект из nvarchar

1 голос
/ 12 февраля 2020

У меня есть следующая таблица в 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" } }

1 Ответ

2 голосов
/ 12 февраля 2020

Вам необходимо использовать FOR JSON с JSON_QUERY(), как описано в документации ( JSON_QUERY возвращает действительный фрагмент JSON. В результате FOR JSON не делает ' экранирование специальных символов в возвращаемом значении JSON_QUERY ):

SELECT id, JSON_QUERY(jsonData) AS jsonData
FROM [MyTable] 
FOR JSON AUTO 
...