Ao usar o SQL Server, você pode usar o
FOR JSON
cláusula em uma consulta para formatar os resultados como JSON. Ao fazer isso, você deve escolher a opção AUTO
ou o PATH
opção. Este artigo contém exemplos de uso do PATH
opção. Sintaxe
A sintaxe fica assim:
SELECT ... (your query goes here) FOR JSON PATH;
Então, basicamente, tudo que você precisa fazer é adicionar
FOR JSON PATH
ao final de sua consulta. Exemplo 1 – Uso básico
Aqui está um exemplo para demonstrar.
USE Music; SELECT TOP 3 AlbumName, ReleaseDate FROM Albums FOR JSON PATH;
Resultado:
[ { "AlbumName": "Powerslave", "ReleaseDate": "1984-09-03" }, { "AlbumName": "Powerage", "ReleaseDate": "1978-05-05" }, { "AlbumName": "Singing Down the Lane", "ReleaseDate": "1956-01-01" } ]
Assim, os resultados saem como um documento JSON bem formatado, em vez de linhas e colunas.
Neste caso eu usei
TOP 3
para limitar o conjunto de resultados a apenas três resultados. Resultados de linha única?
Seus resultados podem aparecer inicialmente em uma única linha e uma única coluna, e como uma longa linha como esta:
Se este for o caso, tente clicar no conjunto de resultados. Dependendo do seu software de gerenciamento de banco de dados, isso deve iniciar o documento JSON conforme aparece no exemplo acima.
Se isso funcionará exatamente como descrito, dependerá do software que você usa para consultar o SQL Server.
No momento da escrita, isso funcionou bem para mim ao usar o SQL Operations Studio (que desde então foi renomeado para Azure Data Studio). Também funcionou bem ao usar a extensão MSSQL no VS Code. No entanto, o SSMS apenas formata os resultados como uma linha longa (embora ainda no formato JSON).
Eu também tive vários graus de sucesso usando ferramentas de linha de comando.
Você também pode descobrir que os resultados são inicialmente distribuídos em várias linhas, dependendo do tamanho do conjunto de resultados.
Se você não conseguir exibir os resultados de maneira satisfatória, tente uma ferramenta diferente.
Exemplo 2 – Consulta em várias tabelas
Neste exemplo, consulto duas tabelas que têm um relacionamento um-para-muitos entre elas. Nesse caso, cada artista pode ter vários álbuns, e eu uso uma subconsulta para recuperar os álbuns de cada artista.
USE Music; SELECT TOP 2 ArtistName, (SELECT AlbumName FROM Albums WHERE Artists.ArtistId = Albums.ArtistId FOR JSON PATH) AS Albums FROM Artists ORDER BY ArtistName FOR JSON PATH;
Resultado:
[ { "ArtistName": "AC/DC", "Albums": [ { "AlbumName": "Powerage" } ] }, { "ArtistName": "Allan Holdsworth", "Albums": [ { "AlbumName": "All Night Wrong" }, { "AlbumName": "The Sixteen Men of Tain" } ] } ]
Nesse caso, cada álbum foi aninhado em “Álbuns”. Isso ocorre porque os álbuns são retornados por meio de uma subconsulta.
Exemplo 3 – Saída aninhada com notação de ponto
Ao usar o
PATH
opção, você pode usar nomes de coluna separados por pontos para criar objetos aninhados. Para fazer isso, use um alias separado por pontos. Aqui está um exemplo:
USE Music; SELECT TOP 3 AlbumId, AlbumName AS 'Details.Album Name', ReleaseDate AS 'Details.Release Date' FROM Albums FOR JSON PATH;
Resultado:
[ { "AlbumId": 1, "Details": { "Album Name": "Powerslave", "Release Date": "1984-09-03" } }, { "AlbumId": 2, "Details": { "Album Name": "Powerage", "Release Date": "1978-05-05" } }, { "AlbumId": 3, "Details": { "Album Name": "Singing Down the Lane", "Release Date": "1956-01-01" } } ]
Exemplo 4 – Adicionar um nó raiz
Você pode usar o
ROOT()
opção para adicionar um nó raiz à saída. Isso adiciona um único elemento de nível superior à saída. Para fazer isso, basta adicionar o ROOT()
opção ao final da consulta, com o nome que você deseja que o nó raiz tenha. Assim, podemos modificar o exemplo anterior para isso:
USE Music; SELECT TOP 3 AlbumId, AlbumName AS 'Details.Album Name', ReleaseDate AS 'Details.Release Date' FROM Albums FOR JSON PATH, ROOT('Albums');
Resultado:
{ "Albums": [ { "AlbumId": 1, "Details": { "Album Name": "Powerslave", "Release Date": "1984-09-03" } }, { "AlbumId": 2, "Details": { "Album Name": "Powerage", "Release Date": "1978-05-05" } }, { "AlbumId": 3, "Details": { "Album Name": "Singing Down the Lane", "Release Date": "1956-01-01" } } ] }
Exemplo 5 – Remova o wrapper de matriz
Você pode usar o
WITHOUT_ARRAY_WRAPPER
opção para remover os colchetes que cercam os resultados. Exemplo:
USE Music; SELECT TOP 1 AlbumName, ReleaseDate FROM Albums FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;
Resultado:
{ "AlbumName": "Powerslave", "ReleaseDate": "1984-09-03" }
Observe que, se você fizer isso em um resultado de várias linhas, acabará com um JSON inválido.