Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

JSON no SQL Server


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:
  1. Atualizar
  2. Inserir
  3. Excluir
  4. 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.