| Bellacosa Mainframe e o json em cobol parte iii |
JSON em COBOL no IBM Z: O Holocron das APIs Modernas
Parte 3 – JSON GENERATE
Quando o Padawan Aprende a Construir APIs REST com COBOL e Descobre que Também Pode Falar com a Galáxia
Por Bellacosa Mainframe
"JSON PARSE ensina COBOL a escutar. JSON GENERATE ensina COBOL a responder. Um Mestre Jedi precisa dominar ambos."
Mestre Bellacosa Sysprog Jedi
Introdução
Nas jornadas anteriores, o jovem Padawan descobriu algo extraordinário.
Primeiro aprendeu que COBOL moderno fala JSON.
Depois aprendeu a utilizar JSON PARSE.
Agora chega o momento em que ele percebe uma verdade ainda mais impressionante.
COBOL não apenas entende JSON.
COBOL também consegue produzir JSON de forma elegante, otimizada e extremamente rápida.
E isso é feito através de uma instrução quase tão poderosa quanto um sabre de luz recém-montado.
JSON GENERATE
O que é JSON GENERATE?
JSON GENERATE é um serializador.
Seu objetivo é simples.
Transformar estruturas COBOL em texto JSON.
Visualmente.
WORKING STORAGE
↓
JSON GENERATE
↓
JSON
↓
REST API
↓
Aplicativo
↓
Microsserviço
Em outras palavras.
Ele faz exatamente o oposto de JSON PARSE.
Antes do Enterprise COBOL 6
A vida era difícil.
Muitos sistemas faziam:
STRING
"{"
'"id":'
WS-ID
','
'"nome":"'
WS-NOME
'"'
"}"
INTO WS-BUFFER
Problemas.
Vírgulas.
Aspas.
Espaços.
Campos vazios.
Arrays.
Escape.
Tudo manual.
Padawan sofria.
O nascimento de JSON GENERATE
Enterprise COBOL Version 6.
Introduziu.
JSON GENERATE.
Mudou completamente.
Integrações.
Hoje.
Muito utilizado.
6.3
6.4
6.5
Primeiro exemplo
Passo 1
Estrutura COBOL
01 WS-CLIENTE.
05 WS-ID.
PIC 9(5).
05 WS-NOME.
PIC X(30).
05 WS-IDADE.
PIC 999.
Passo 2
JSON Buffer
01 WS-JSON.
PIC X(500).
Passo 3
Popular
MOVE 100
TO WS-ID
MOVE 'Bellacosa'
TO WS-NOME
MOVE 52
TO WS-IDADE
Passo 4
Gerar
JSON GENERATE
WS-JSON
FROM WS-CLIENTE
Passo 5
Display
DISPLAY WS-JSON
Resultado.
{
"id":100,
"nome":"Bellacosa",
"idade":52
}
Pronto.
API pronta.
Como funciona internamente?
Compilador gera.
Serializer.
Percorre.
Estrutura.
Campo.
Por campo.
Converte.
Numéricos.
Strings.
Booleans.
Occurs.
Escreve.
JSON.
Visualmente.
WS-ID
↓
Serializer
↓
"id":100
Memória
JSON continua sendo.
Texto.
Exemplo.
01 WS-JSON.
PIC X(10000).
Buffer.
Grande.
Serializer.
Preenche.
Pouco overhead.
Muito eficiente.
Campos vazios
Problema comum.
Exemplo.
MOVE SPACES
TO WS-NOME
Resultado.
"name":""
Nem sempre desejado.
SUPPRESS
Ferramenta poderosa.
Exemplo conceitual.
JSON GENERATE
WS-JSON
FROM WS-DADOS
SUPPRESS
Campos vazios.
Não aparecem.
Muito usado.
Em APIs.
OMITTED
Outra técnica.
Campo opcional.
Excelente.
Open Banking.
PIX.
NAME OF
Talvez a funcionalidade favorita.
Do Bellacosa.
COBOL.
05 WS-NOME.
JSON desejado.
"customerName"
NAME OF permite.
Mapear.
Muito elegante.
Exemplo API PIX
COBOL.
01 PIX.
05 CHAVE.
05 VALOR.
05 DATA.
JSON.
{
"chave":"abc",
"valor":100,
"data":"2026-06-25"
}
JSON GENERATE.
Faz.
Tudo.
Arrays
Muito útil.
COBOL.
05 TELEFONES.
10 TEL OCCURS 5.
JSON.
"telefones":[
"1111",
"2222"
]
Automático.
Objetos aninhados
COBOL.
01 CLIENTE.
05 DADOS.
10 ID.
10 NOME.
05 ENDERECO.
10 CIDADE.
10 CEP.
Resultado.
{
"cliente":{
"id":1,
"nome":"Bellacosa"
},
"endereco":{
"cidade":"SP"
}
}
Muito elegante.
Null
JSON suporta.
COBOL não.
Precisamos.
Decidir.
Campo vazio.
Campo omitido.
Valor padrão.
Muito importante.
UTF8
Outro cuidado.
JSON.
UTF8.
COBOL.
EBCDIC.
Conversão.
Necessária.
Especialmente.
Acentos.
José.
São Paulo.
Ç.
Ã.
Sempre testar.
Segurança
Poucos lembram.
JSON GENERATE.
Também possui.
Riscos.
Exemplo.
Dados internos.
Senha.
CPF.
Token.
Acidentalmente.
Expostos.
Exemplo.
01 CLIENTE.
05 SENHA.
PIC X(20).
JSON GENERATE.
Sem SUPPRESS.
API.
Expõe.
Senha.
Muito perigoso.
Boa prática
Criar.
Estrutura.
Específica.
API.
Nunca.
Gerar.
Diretamente.
Working Storage.
Inteira.
Pretty JSON
COBOL.
Não gera.
JSON bonito.
Compacto.
Mais eficiente.
Consumidor.
Pode formatar.
Performance
Excelente.
Serializer.
Nativo.
Compilado.
Muito rápido.
Melhor.
Que STRING.
Melhor.
Que montar.
Na mão.
Benchmark aproximado
Manual.
100%
JSON GENERATE.
Muito menor.
CPU.
Menos bugs.
Mais manutenção.
Curiosidade
Muitos aplicativos bancários.
Recebem.
JSON.
Gerado.
Por COBOL.
Usuário.
Nunca percebe.
Abre app.
Consulta saldo.
Recebe.
JSON.
Origem.
COBOL.
No z17.
APIs modernas
JSON GENERATE é usado.
Em.
z/OS Connect
CICS
Liberty
MQ
Kafka
OpenShift
Cloud Pak
Praticamente.
Todo lugar.
Bellacosa Best Practices
Sempre
Criar DTO.
Separado.
Sempre
Usar SUPPRESS.
Sempre
Validar UTF8.
Sempre
Versionar JSON.
Sempre
Documentar.
Swagger.
OpenAPI.
Nunca
Expor.
Campos internos.
Nunca
Montar.
JSON.
Na mão.
Com STRING.
Comparação
| Técnica | Recomendada |
|---|---|
| STRING | Não |
| UNSTRING | Não |
| INSPECT | Não |
| Parser próprio | Evitar |
| JSON GENERATE | Sim |
| JSON PARSE | Sim |
O Conselho do Mestre Bellacosa
Durante muitos anos, o programador COBOL era visto como alguém responsável apenas por arquivos sequenciais, relatórios batch e transações CICS.
JSON GENERATE mudou essa percepção.
Ele permitiu que sistemas escritos décadas atrás começassem a responder chamadas REST, conversar com aplicativos móveis, participar do Open Finance e integrar-se naturalmente a arquiteturas modernas baseadas em APIs.
Talvez essa seja uma das maiores virtudes do Enterprise COBOL.
Ele não exige que o desenvolvedor abandone tudo aquilo que aprendeu.
Ele simplesmente acrescenta novas habilidades.
E diz ao Padawan:
Continue usando seus níveis 01, 05 e 10.
Continue escrevendo programas robustos.
Continue confiando na estabilidade do IBM Z.
Eu apenas ensinarei seu código a responder em uma linguagem compreendida por praticamente toda a galáxia digital.
Sem comentários:
Enviar um comentário