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]
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.