У меня есть таблица, которая содержит строки json с идентификатором группы. Я хочу создать массив json, который содержит все объекты json с одинаковым идентификатором.
Обратите внимание, что в моем случае содержимое столбца, которое я пытаюсь поместить в массив, представляет собой фрагменты json, поэтому мой случай и вопрос более конкретны, чем превращение строк в массив. Использование OPENJSON
в принятом ответе также усиливает эту деталь.
Однако я не смог найти способ использования FOR JSON, который позволял бы мне выбирать один столбец, а имя этого столбца не становилось ключом для всех объектов в массиве.
Я понимаю, что ключ, от которого я пытаюсь избавиться, необходим для проецирования столбцов на ключи представления значения ключа json, но в этом случае я выбираю только один столбец, и мне любопытно, есть ли уловка, о которой я не могу думать.
Я могу достичь того, чего хочу, просто используя COALASCE, но я хотел бы знать, возможно ли обработать этот крайний случай, используя FOR JSON. Вот упрощенный код, который демонстрирует, что я пытаюсь сделать:
BEGIN
declare @Json_Snippets table (id int, json nvarchar(max));
insert into @Json_Snippets (id, json) VALUES (1, '{"root":{"obj":"one"}}');
insert into @Json_Snippets (id, json) VALUES (1, '{"root":{"obj":"two"}}');
select
JSON_QUERY(js.json) as 'dont_want_this'
from
@Json_Snippets js
FOR JSON PATH;
END
Мне нужно JSON_QUERY, чтобы избежать экранирования символов в столбце json, т. Е. Строка json остается как json. Запуск выше дает:
[{"dont_want_this":{"root":{"obj":"one"}}},{"dont_want_this":{"root":{"obj":"two"}}}]
Я бы хотел получить:
[{"root":{"obj":"one"}},{"root":{"obj":"two"}}]