Parte 2 da minha incursão em JSON, gostaria de adicionar um usuário a vários grupos: insira uma matriz JSON em uma tabela.
Idealmente, o JSON ficaria assim:
'{
"Email": "[email protected]",
"Prefix":null,
"FirstName": "Worf",
"MiddleInitial": "",
"LastName": "Mogh",
"Suffix": "Son Of",
"Title" :"Commander",
"Groups": [{"0", "1", "5"}]
}'
Atualmente, posso fazer isso com JSON assim:
'{
"Email": "[email protected]",
"Prefix":null,
"FirstName": "Worf",
"MiddleInitial": "",
"LastName": "Mogh",
"Suffix": "Son Of",
"Title" :"Commander",
"Groups": "1,2,3,4"
}'
então "descompacte" com a seguinte cantiga:
declare @groups varchar(1000)
select @groups = Groups from openjson(@json)
WITH
(
Groups nvarchar(100) '$.Groups'
)
print @groups
select value from string_split(@groups, ',')
que retorna uma pequena tabela agradável assim:
Value
1
2
3
4
Problema Este é um JSON ruim e o desenvolvedor da Web vai tirar sarro de mim.
Pergunta Como você descompacta adequadamente uma matriz JSON no SQL Server?
Eu acho que sua definição JSON para arrays pode ser um pouco estranha, você deve conseguir descompactar um array assim:
A notação
"Groups":[{"0", "1", "5"}]
está dizendo que dentro de um objeto, existe uma chave "Grupos" que tem um valor de um array contendo um único elemento. Esse elemento também é um objeto, mas"0", "1", "5"
não é significativo em um contexto JSON. Por exemplo: