Como trabalhar com JSON no PL/SQL com objetos

Escrever um JSON no Oracle pode ser demorado e massante, mas vamos mostrar como trabalhar com JSON no PL/SQL de maneira otimizada, orientada a objeto.

[ad#texto]

Como trabalhar com JSON no PL/SQL
Como trabalhar com JSON no PL/SQL

Imagine ter que escrever um JSON como uma string dentro de uma procedure PL/SQL, muito massante. Mas vamos mostrar como trabalhar com JSON no PL/SQL orientado a objeto.

Será apenas necessário compilar uma package no seu banco Oracle e pronto.

O interessante é que você pode converter um objeto automaticamente em uma String formatada como JSON e também fazer o processo inverso, convertendo a String formatada como JSON no objeto.

[ad#texto]

Como trabalhar com JSON no PL/SQL: compilar a package

O primeiro passo é realizar o download da package no site da biblioteca Librairie-JSON.

Basta descompactar o arquivo ZIP e compilar no seu banco Oracle os arquivos “JSON.pks” e “JSON.pkb”.

Após compilar é interessante ajustar o package criado para que o JSON criado utilize aspas duplas ao invés de aspas simples (sinceramente não sei o motivo do desenvolvedor da API ter feito assim).

Para realizar o ajuste basta editar a package criada com a seguinte alteração:

--g_stringDelimiter      varchar2(1) := '''';
g_stringDelimiter      varchar2(1) := '"';

Resumindo, basta comentar a primeira linha, que é a original e depois criar uma cópia alterando as aspas utilizadas.

Como trabalhar com JSON no PL/SQL: trabalhando com a API

Com esta API podemos trabalhar na conversão direta de objetos em JSON e vice-versa, muito similar como fazemos em Java, por exemplo.

Abaixo vou mostrar um trecho de código simples onde criamos alguns objetos e montamos um JSON de maneira bem simples.

-- Ativar o output para vermos o resultado
SET SERVEROUT ON

declare -- Declarar dois objetos para trabalharmos com um JSON dentro de outro jsonObject JSON.JSONStructObj; jsonDetail JSON.JSONStructObj;
-- String que irá receber o JSON formatado em String jsonString varchar2(32000);

begin -- Criar objetos que serão persistidos em JSON JSON.newJSONObj(jsonObject); JSON.newJSONObj(jsonDetail);

-- Cria um JSON de detalhes com seus atributos jsonDetail := JSON.addAttr(jsonDetail, 'numeroPedido', 99999999); jsonDetail := JSON.addAttr(jsonDetail, 'artigo', 'P');
-- Fecha a escrita no objeto JSON.closeJSONObj(jsonDetail);
-- Cria um JSON principal com seus atributos jsonObject := JSON.addAttr(jsonObject, 'tipo', 'VENDA'); jsonObject := JSON.addAttr(jsonObject, 'detalheItem', jsonDetail);
-- Fecha a escrita no objeto JSON.closeJSONObj(jsonObject);
-- Converte objeto em String formatada em JSON jsonString := JSON.JSON2String(jsonObject);
-- Escrever a String no console para vermos o resultado dbms_output.put_line(jsonString);

end;

Com tudo correndo bem você receberá no console o seguinte JSON:

{ "tipo" : "VENDA", "detalheItem" : 
{ "numeroPedido" : 99999999, "artigo" : "P" } }

Notaram a facilidade? A própria API se encarrega de gerar os níveis e demais detalhes do JSON, inclusive é possível criar arrays dentro do seu JSON.

Petter Rafael

Desenvolvedor Web atua com as tecnologias Java e PHP apoiadas pelos bancos de dados Oracle e MySQL. Além dos ambientes de desenvolvimento acima possuiu amplo conhecimento em servidores Apache/Tomcat, Photoshop, Arte & Foto, Flash e mais uma dezena de ferramentas e tecnologias emergentes. Atualmente colabora com o Viablog escrevendo sobre programação e tecnologia.