У меня небольшая проблема в моем случае , потому что в моем случае столбец может содержать текст 'John' напрямую или текст как массив '["John", "Smith"] "оба. Так, как я могу предотвратить двойное экранирование JSON в FOR JSON output ? Я думаю, что я делаю что-то не так здесь. Пожалуйста, проверьте мой пример:
Create table #jsonTest(NameList varchar(max))
insert into #jsonTest(NameList)
select '["John","Smith"]'
Теперь, если я хочу его вывод, он выдаст правильный вывод из этого (без escape-символа):
select JSON_QUERY(NameList) NameList from #jsonTest for json auto
Вывод:
[{"NameList":["John","Smith"]}]
Пример простого текста:
truncate table #jsonTest
insert into #jsonTest(NameList)
Select 'John'
Теперь для этого Мне нужно изменить свой запрос на выборку для правильного вывода, потому что, как уже упоминалось, JSON_QUERY возвращает только объекты и массивы. Итак я изменил это на это:
select case when ISJSON(NameList) = 1 then JSON_QUERY(NameList) else NameList end NameList from #jsonTest for json auto
Вывод:
[{"NameList":"John"}]
Сейчас Это покажет правильный вывод, но если я снова вставлю предыдущие данные и попробую верхний выбор запрос
truncate table #jsonTest
insert into #jsonTest(NameList)
select '["John","Smith"]'
select case when ISJSON(NameList) = 1 then JSON_QUERY(NameList) else NameList end NameList from #jsonTest for json auto
Выходные данные:
[{"NameList":"[\"John\",\"Smith\"]"}]
, затем это дает escape-символы на выходе . Что не так в коде?