No 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 AUTO
opção. Sintaxe
A sintaxe fica assim:
SELECT ... (your query goes here) FOR JSON AUTO;
Então, basicamente, tudo que você precisa fazer é adicionar
FOR JSON AUTO
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 AUTO;
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 em que escrevo, 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. Neste caso, cada artista pode ter vários álbuns.
USE Music; SELECT ArtistName, AlbumName FROM Artists INNER JOIN Albums ON Artists.ArtistId = Albums.ArtistId ORDER BY ArtistName FOR JSON AUTO;
Resultado:
[ { "ArtistName": "AC/DC", "Albums": [ { "AlbumName": "Powerage" } ] }, { "ArtistName": "Allan Holdsworth", "Albums": [ { "AlbumName": "All Night Wrong" }, { "AlbumName": "The Sixteen Men of Tain" } ] }, { "ArtistName": "Buddy Rich", "Albums": [ { "AlbumName": "Big Swing Face" } ] }, { "ArtistName": "Devin Townsend", "Albums": [ { "AlbumName": "Ziltoid the Omniscient" }, { "AlbumName": "Casualties of Cool" }, { "AlbumName": "Epicloud" } ] }, { "ArtistName": "Iron Maiden", "Albums": [ { "AlbumName": "Powerslave" }, { "AlbumName": "Somewhere in Time" }, { "AlbumName": "Piece of Mind" }, { "AlbumName": "Killers" }, { "AlbumName": "No Prayer for the Dying" } ] }, { "ArtistName": "Jim Reeves", "Albums": [ { "AlbumName": "Singing Down the Lane" } ] }, { "ArtistName": "Michael Learns to Rock", "Albums": [ { "AlbumName": "Blue Night" }, { "AlbumName": "Eternity" }, { "AlbumName": "Scandinavia" } ] }, { "ArtistName": "The Script", "Albums": [ { "AlbumName": "No Sound Without Silence" } ] }, { "ArtistName": "Tom Jones", "Albums": [ { "AlbumName": "Long Lost Suitcase" }, { "AlbumName": "Praise and Blame" }, { "AlbumName": "Along Came Jones" } ] } ]
Como você pode ver, cada álbum foi aninhado em “Álbuns”. Isso ocorre porque o
AUTO
A opção determina a saída com base na ordem das colunas no SELECT
list e suas tabelas de origem. Exemplo 3 – 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 ArtistName, AlbumName FROM Artists INNER JOIN Albums ON Artists.ArtistId = Albums.ArtistId ORDER BY ArtistName FOR JSON AUTO, ROOT('Music');
Resultado:
{ "Music": [ { "ArtistName": "AC/DC", "Albums": [ { "AlbumName": "Powerage" } ] }, { "ArtistName": "Allan Holdsworth", "Albums": [ { "AlbumName": "All Night Wrong" }, { "AlbumName": "The Sixteen Men of Tain" } ] } ] }
Também limitei o conjunto de resultados a apenas três resultados adicionando
TOP 3
à consulta. Exemplo 4 – 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 AUTO, 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.