JSON (J avaS cript O objeto N otation) é um padrão muito popular para troca de dados, especialmente na API REST. Quase todos os sites modernos, aplicativos Android ou iOS usam isso para trocar dados com o servidor. A partir do SQL Server 2016, a Microsoft estende seu suporte para JSON por meio de algumas funções internas. Dessa forma, o SQL Server oferece suporte a recursos NOSQL em bancos de dados relacionais tradicionais. Vamos examiná-lo:
- ISJSON – examina uma string se é um JSON válido ou não
- JSON_VALUE – recupera o valor de uma string JSON
- JSON_QUERY – busca objeto ou array de uma string JSON
- JSON_MODIFY – retorna a string JSON atualizada
- OPENJSON – analisa o texto JSON e retorna objetos e propriedades da entrada JSON como linhas e colunas
- Cláusula FOR JSON – exporta dados SQL para o formato JSON
Função ISJSON
DECLARE @json NVARCHAR(MAX); SET @json = N'{ "info":[ { "id":"1", "name":"Robert Aragon", "ssn":"489-36-8350", "credit_card":[ "4929-3813-3266-4295", "5370-4638-8881-3020" ], "address":{ "town":"Avon", "area":"New York", "zipcode":"76148" } }, { "id":"2", "name":"Thomas Conley", "ssn":"690-05-5315", "credit_card":[ "5299-1561-5689-1938" ], "address":{ "town":"Jackson Street", "area":"New York", "zipcode":"80233" } }, { "id":"3", "name":"Susan Davis", "ssn":"421-37-1396", "credit_card":[ "5293-8502-0071-3058" ], "address":{ "town":"Rock Beach", "area":"Los angeles", "zipcode":"900341" } }, { "id":"4", "name":"Christopher Diaz", "ssn":"458-02-6124", "credit_card":[ "5548-0246-6336-5664" ], "address":{ "town":"Small town", "area":"Wasshington", "zipcode":"63126" } }, { "id":"5", "name":"Rick Edwards", "ssn":"612-20-6832", "credit_card":[ "4539-5385-7425-5825" ], "address":{ "town":"Free Town", "area":"Utah", "zipcode":"97222" } }, { "id":"6", "name":"Victor Faulkner", "ssn":"300-62-3266", "credit_card":[ "4916-9766-5240-6147", "4532-4220-6922-9909", "5218-0144-2703-9266" ], "address":{ "town":"Dakota", "area":"North Dakota", "zipcode":"92104" } } ] } '; SELECT ISJSON(@json);
Saída
1 -- 1 if it is a valid JSON otherwise 0
Função JSON_VALUE
Esta função é usada para recuperar um valor escalar de uma string JSON. Sua sintaxe é
JSON_VALUE(expression, path)
expressão é o nome de uma variável ou coluna que contém texto JSON e é a propriedade a ser extraída. Por exemplo, executar a instrução abaixo na string JSON acima produzirá a saída abaixo:
SELECT JSON_VALUE(@json, '$.info[3].credit_card[0]')
Saída
5548-0246-6336-5664
A função JSON_VALUE retorna um valor de texto único do tipo nvarchar(4000) . Ele retorna null se o caminho especificado não for encontrado no objeto JSON ou o valor estiver além de nvarchar(4000). Usando 'estrito ' palavra-chave antes do caminho lançará o erro se o caminho especificado não estiver disponível no objeto JSON.
Função JSON_QUERY
O A função JSON_QUERY(expressão [,caminho]) recebe o nome de uma variável ou coluna que contém texto JSON e o caminho JSON que especifica o objeto ou a matriz a ser extraída como seus argumentos.
Saída
Ele retorna um fragmento JSON do tipo nvarchar(max) . Como a função JSON_VALUE retorna null se o valor especificado não for um objeto ou uma matriz. O uso da palavra-chave "estrita" gerará o erro.
Função JSON_MODIFY
Ele atualiza o valor de uma propriedade em uma string JSON e retorna a string JSON atualizada. Leva expression, path e new como argumentos. Usando esta função, podemos fazer a operação abaixo em uma string JSON:
- Atualizar
- Inserir
- Excluir
- Anexar
1. Atualizar
Atualiza o valor de um determinado caminho.
SELECT JSON_MODIFY(@json,'$.info[0].name', 'Mehedi')
Saída
2. Inserir
Um novo valor é adicionado na string JSON se o atributo no caminho fornecido não existir. Caso contrário, ele atualizará o valor existente conforme o exemplo acima. O novo atributo é adicionado ao final do JSON.
SELECT JSON_MODIFY(@json,'$.info[0].last_name', 'Mehedi')
Saída
3. Excluir
Colocar o valor NULL no caminho apenas o removerá.
SELECT JSON_MODIFY(@json,'$.info[0].name', NULL)
Saída
4. Anexar
Novo elemento pode ser anexado na matriz como abaixo:
SELECT JSON_MODIFY(@json,'append $.info[0].credit_card','4539-5385-7425-5825')
Saída
Função OPENJSON
Esta é uma função com valor de tabela que analisa o texto JSON e retorna objetos e propriedades da entrada JSON como linhas e colunas.
DECLARE @json NVARCHAR(MAX); SET @json = N'{"id":"1", "name": "Robert Aragon", "ssn": "489-36-8350", "credit_card":["4929-3813-3266-4295","5370-4638-8881-3020"], "address": {"town": "Avon", "area": "New York", "zipcode": "76148"}}'; SELECT * FROM OpenJson(@json) with ( id int '$.id', name varchar(50) '$.name', ssn varchar(50) '$.ssn', [credit_card] nvarchar(MAX) AS JSON, [address] nvarchar(MAX) AS JSON )
Saída
PARA Cláusula JSON
Essa cláusula é amplamente usada com TSQL para exportar dados de tabela SQL para o formato JSON. Possui duas variantes:
- AUTO – A saída JSON padrão é gerada usando a opção AUTO.
- PATH – A estrutura do JSON pode ser modificada pelo nome da coluna ou aliases usando a opção PATH
IF OBJECT_ID('Test1', 'U') IS NOT NULL DROP TABLE Test1; GO -- Create the table CREATE TABLE Test1( pk_id int not null identity(1,1), name varchar(10) default ('Mehedi') ) GO -- Populate with 3 sample data INSERT INTO Test1 default values GO 2 IF OBJECT_ID('Test2', 'U') IS NOT NULL DROP TABLE Test2; GO -- Create the table CREATE TABLE Test2( pk_id int not null identity(1,1), area varchar(10) default ('Dhanmondi'), city varchar(10) default ('Dhaka') ) GO -- Populate with 3 sample data INSERT INTO Test2 default values GO 1 -- Example of AUTO SELECT A.pk_id, A.name, (SELECT pk_id, area, city FROM Test2 B WHERE A.pk_id = B.pk_id FOR JSON AUTO ) as test2 FROM Test1 A FOR JSON AUTO -- Example of PATH SELECT A.pk_id, A.name, (SELECT pk_id as id, area, city FROM Test2 B WHERE A.pk_id = B.pk_id FOR JSON AUTO ) as test2 FROM Test1 A FOR JSON PATH , ROOT ('EmployeeInfo') GO
Saída
Conclusão
Isso é tudo sobre o JSON no SQL Server. Feliz TSQL!
Este artigo foi retirado do meu blog.