SQL JSON - объединить несколько строк в одну строку JSON - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь создать приведенный ниже JSON из SQL-запроса, используя функцию FOR JSON.

"lineStrings": [
"[[[-0.340254,51.605946],[-0.340278,51.605685],[-0.339718,51.604400], 
[-0.339280,51.603746],[-0.338915,51.603454],[-0.338657,51.603018]]]

Есть идеи?

1 Ответ

0 голосов
/ 23 ноября 2018

Обновление

Пожалуйста, попробуйте это / дайте мне знать, если это то, что вы после. Пример

declare @myTable table (a decimal(12,8), b decimal(12,8))
insert @myTable (a, b)
values (-0.340254,51.605946),(-0.340278,51.605685),(-0.339718,51.604400),(-0.339280,51.603746),(-0.338915,51.603454),(-0.338657,51.603018)

select string_agg(c,',') as lineStrings
from
(
    select 1 ignore, JSON_MODIFY(JSON_MODIFY('[]', 'append $', a), 'append $', b) 
    from @myTable
) x(ignore, c)
group by ignore
for json path, without_array_wrapper

пс.В документах есть несколько полезных примеров некоторых распространенных проблем.


Исходная попытка

Вот хакерское решение, которое использует стандартный вывод for json auto, а затем манипулируетрезультирующая строка с использованием функции replace.Поскольку вы работаете только с числами, это безопасно, но я бы не стал рисковать, если бы у вас были какие-либо текстовые поля.

Вероятно, есть лучший способ, но я не уверен, что это такое ...

select replace(replace(replace(replace(jsonString,'"a":',''),'"b":',''),'{','['),'}',']') hackedJson
, jsonString returnedJson
from
(
    select *
    from 
    (
        values (-0.340254,51.605946),(-0.340278,51.605685),(-0.339718,51.604400),(-0.339280,51.603746),(-0.338915,51.603454),(-0.338657,51.603018)
    ) myTable (a, b)
    FOR JSON AUTO
) j( jsonString)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...