Olá Pessoal,
Boa tarde.
Neste post irei demonstrar como ler strings JSON e converter para uma tabela e converter os dados de uma tabela para JSON e XML utilizando apenas T-SQL. Essa dica é bem útil quando você está utilizando uma versão anterior ao SQL Server 2016 e precisa ler strings Json.
Caso você esteja utilizando o SQL Server 2016 ou superior, saiba que já existe suporte nativo à JSON. Para saber como funciona esse suporte nativo, leia o meu post SQL Server 2016 – Utilizando o suporte nativo a JSON (JSON_VALUE, JSON_QUERY, OPENJSON, FOR JSON, ISJSON, JSON_MODIFY).
O que é JSON
JSON, um acrônimo para “JavaScript Object Notation”, é um formato leve para intercâmbio de dados computacionais. A simplicidade de JSON tem resultado em seu uso difundido, especialmente como uma alternativa para XML em AJAX.
Uma das vantagens reivindicadas de JSON sobre XML como um formato para intercâmbio de dados neste contexto, é o fato de ser muito mais fácil escrever um analisador JSON. Em JavaScript mesmo, JSON pode ser analisado trivialmente usando a função eval(). Isto foi importante para a aceitação de JSON dentro da comunidade AJAX devido a presença deste recurso de JavaScript em todos os navegadores web atuais.
Na prática, os argumentos a respeito da facilidade de desenvolvimento e desempenho do analisador são raramente relevados devido aos interesses de segurança no uso de eval() e a crescente integração de processamento XML nos navegadores web modernos. Por esta razão JSON é tipicamente usado em ambientes onde o tamanho do fluxo de dados entre o cliente e o servidor é de supra importância (daí seu uso por Google, Yahoo, etc., os quais servem milhões de usuários), onde a fonte dos dados pode ser explicitamente confiável, e onde a perda dos recursos de processamento XSLT no lado cliente para manipulação de dados ou geração da interface, não é uma consideração.
Um ótimo uso para a utilização de JSON no SQL Server e o que me motivou a fazer este post, é para a integração e consumo de dados de webservices que utilizam JSON para estabelecer a comunicação com o cliente consumidor da informação.
Lendo uma string JSON
Com a utilização da função que vou postar abaixo, criada pelo Phil Factor, é possível ler strings JSON facilmente, conforme o exemplo abaixo:
Implementando a função:
Visualizar código-fonte
Criando uma string JSON a partir do banco
Como o uso dessa função, você pode criar uma string JSON a partir de uma tabela em um formato específico. Para isso, precisamos criar esse tipo de dado antes de utilizar a nossa função.
Pré-Requisito – Criando a função para tratar os dados:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
IF (OBJECT_ID (N'dbo.fncJSON_Escape') IS NOT NULL) DROP FUNCTION dbo.fncJSON_Escape GO CREATE FUNCTION dbo.fncJSON_Escape ( @Ds_String NVARCHAR(MAX) ) RETURNS NVARCHAR(MAX) AS BEGIN SELECT @Ds_String = REPLACE(@Ds_String, FromString, ToString) FROM ( SELECT '\"' AS FromString, '"' AS ToString UNION ALL SELECT '\', '\\' UNION ALL SELECT '/', '\/' UNION ALL SELECT CHAR(08), '\b' UNION ALL SELECT CHAR(12), '\f' UNION ALL SELECT CHAR(10), '\n' UNION ALL SELECT CHAR(13), '\r' UNION ALL SELECT CHAR(09), '\t' ) substitutions RETURN @Ds_String END |
Pré-Requisito – Criando o tipo JSON:
1 2 3 4 5 6 7 8 9 10 11 |
IF EXISTS (SELECT * FROM sys.types WHERE name = 'JSON') DROP TYPE dbo.JSON CREATE TYPE dbo.JSON AS TABLE ( Id_Elemento INT NOT NULL, Nr_Sequencia [INT] NULL, Id_Objeto_Pai INT, Id_Objeto INT, Ds_Nome NVARCHAR(2000), Ds_String NVARCHAR(MAX) NOT NULL, Ds_Tipo VARCHAR(10) NOT NULL, PRIMARY KEY (Id_Elemento) ) |
Implementando a função:
Visualizar código-fonte
Criando um XML a partir de um JSON
Com o uso da função fncJSON_To_XML, pode-se criar um XML a partir de uma string JSON passada para a função, assim com o exemplo abaixo:
Caso você necessite de ajuda para ler e manipular dados em objetos XML utilizando o SQL Server, aprenda como fazer isso lendo o meu artigo SQL Server – Como ler, importar e exportar dados de arquivos XML.
Implementando a função:
Visualizar código-fonte
Solução alternativa para converter uma string JSON para XML
Com a função abaixo (escrita pelo Daniel Muchmacher), você poderá facilmente converter strings Json para um documento XML, onde você poderá utilizar o SQL Server para navegador entre os nós e ler os dados conforme sua necessidade. Essa função é muito útil para instâncias que estão utilizando uma versão anterior ao SQL Server 2016 (sem suporte nativo a JSON), mas você precisa utilizar esse recurso.
Caso você necessite de ajuda para ler e manipular dados em objetos XML utilizando o SQL Server, aprenda como fazer isso lendo o meu artigo SQL Server – Como ler, importar e exportar dados de arquivos XML.
Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
DECLARE @json VARCHAR(MAX) = '{ "glossary": { "title": "example glossary", "GlossDiv": { "title": "S", "GlossList": { "GlossEntry": { "ID": "SGML", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Acronym": "SGML", "Abbrev": "ISO 8879:1986", "GlossDef": { "para": "A meta-markup language, used to create markup languages such as DocBook.", "GlossSeeAlso": ["GML", "XML"] }, "GlossSee": "markup" } } } } }' SELECT dbo.fncJson2xml(@json) |
É isso aí.
Até o próximo post!
ta bloqueado para copiar o codigo ?
Não deveria.. Vou dar uma olhada
Muito boa a dica.