Analisar e transformar dados JSON com OPENJSON
Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Banco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse Analytics
A função de conjunto de linhas OPENJSON converte o texto JSON em um conjunto de linhas e colunas. Depois de transformar uma coleção JSON em um conjunto de linhas com OPENJSON, é possível executar qualquer consulta SQL nos dados retornados ou inseri-los em uma tabela do SQL Server.
A função OPENJSON obtém um único objeto JSON ou uma coleção de objetos JSON e transforma-os em uma ou mais linhas. Por padrão, a função OPENJSON retorna os dados a seguir:
- De um objeto JSON, a função retorna todos os pares chave-valor localizados no primeiro nível.
- De uma matriz JSON, a função retorna todos os elementos da matriz com seus índices.
É possível adicionar uma cláusula opcional WITH para fornecer um esquema que define explicitamente a estrutura da saída.
Opção 1 – OPENJSON com a saída padrão
Ao usar a função OPENJSON sem fornecer um esquema explícito para os resultados, ou seja, sem uma cláusula WITH após OPENJSON, a função retorna uma tabela com as três colunas a seguir:
- O nome da propriedade no objeto de entrada (ou o índice do elemento na matriz de entrada).
- O valor da propriedade ou o elemento da matriz.
- O tipo (por exemplo, cadeia de caracteres, número, booliano, matriz ou objeto).
O OPENJSON retorna cada propriedade do objeto JSON ou cada elemento da matriz como uma linha separada.
Veja um exemplo rápido que usa OPENJSON com o esquema padrão, ou seja, sem a cláusula opcional WITH, e retorna uma linha para cada propriedade do objeto JSON.
Exemplo:
DECLARE @json NVARCHAR(MAX)
SET @json='{"name":"John","surname":"Doe","age":45,"skills":["SQL","C#","MVC"]}';
SELECT *
FROM OPENJSON(@json);
Resultados:
chave | value | tipo |
---|---|---|
name | John | 1 |
sobrenome | Doe | 1 |
age | 45 | 2 |
habilidades | ["SQL","C#","MVC"] | 4 |
Mais informações sobre OPENJSON com o esquema padrão
Para obter mais informações e exemplos, veja Usar OPENJ com o esquema padrão (SQL Server).
Para sintaxe e uso, veja OPENJSON (Transact-SQL).
Opção 2 – Saída OPENJSON com uma estrutura explícita
Quando você especificar um esquema para os resultados usando a cláusula WITH da função OPENJSON, a função retornará uma tabela com apenas as colunas que você definir na cláusula WITH. Na cláusula opcional WITH, especifique um conjunto de colunas de saída, seus tipos e os caminhos das propriedades de origem do JSON para cada valor de saída. OPENJSON itera na matriz de objetos JSON, lê o valor no caminho especificado para cada coluna e converte o valor no tipo especificado.
Veja um exemplo rápido que usa OPENJSON com um esquema para a saída especificada explicitamente na cláusula WITH.
Exemplo:
DECLARE @json NVARCHAR(MAX)
SET @json =
N'[
{
"Order": {
"Number":"SO43659",
"Date":"2011-05-31T00:00:00"
},
"AccountNumber":"AW29825",
"Item": {
"Price":2024.9940,
"Quantity":1
}
},
{
"Order": {
"Number":"SO43661",
"Date":"2011-06-01T00:00:00"
},
"AccountNumber":"AW73565",
"Item": {
"Price":2024.9940,
"Quantity":3
}
}
]'
SELECT * FROM
OPENJSON ( @json )
WITH (
Number varchar(200) '$.Order.Number' ,
Date datetime '$.Order.Date',
Customer varchar(200) '$.AccountNumber',
Quantity int '$.Item.Quantity'
)
Resultados:
Número | Data | Cliente | Quantidade |
---|---|---|---|
SO43659 | 2011-05-31T00:00:00 | AW29825 | 1 |
SO43661 | 2011-06-01T00:00:00 | AW73565 | 3 |
Essa função retorna e formata os elementos de uma matriz JSON.
Para cada elemento na matriz JSON, OPENJSON gera uma nova linha na tabela de saída. Os dois elementos na matriz JSON são convertidos em duas linhas na tabela retornada.
Para cada coluna especificada usando a sintaxe
colName type json_path
, OPENJSON converte o valor encontrado em cada elemento da matriz do caminho especificado no tipo especificado. Neste exemplo, os valores para a colunaDate
são tirados de cada elemento no caminho$.Order.Date
e convertidos em valores de data/hora.
Mais informações sobre o OPENJSON com um esquema explícito
Para obter mais informações e exemplos, consulte Usar OPENJSON com o esquema explícito (SQL Server).
Para sintaxe e uso, veja OPENJSON (Transact-SQL).
O OPENJSON requer o nível de compatibilidade 130
A função OPENJSON está disponível somente no nível de compatibilidade 130. Se o nível de compatibilidade do banco de dados for inferior a 130, o SQL Server não poderá localizar e executar a função OPENJSON. Outras funções internas do JSON estão disponíveis em todos os níveis de compatibilidade.
É possível verificar o nível de compatibilidade na exibição sys.databases
ou nas propriedades do banco de dados.
É possível alterar o nível de compatibilidade de um banco de dados usando o seguinte comando:
ALTER DATABASE <DatabaseName> SET COMPATIBILITY_LEVEL = 130
Saiba mais sobre JSON no SQL Server e no Banco de Dados SQL do Azure
Vídeos da Microsoft
Observação
Alguns dos links de vídeo nesta seção podem não funcionar no momento. A Microsoft está migrando conteúdo armazenado anteriormente no Canal 9 para uma nova plataforma. Atualizaremos os links à medida que os vídeos forem migrados para a nova plataforma.
Para obter uma introdução visual ao suporte interno para JSON no SQL Server e no Banco de Dados SQL do Azure, consulte os seguintes vídeos:
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários