☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta JSON PARSE. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta JSON PARSE. Mostrar todas as mensagens

sábado, 7 de setembro de 2024

JSON em COBOL no IBM Z: O Holocron das APIs Modernas – JSON PARSE - Parte II

 

Bellacosa Mainframe e o json no cobol parte II

JSON em COBOL no IBM Z: O Holocron das APIs Modernas

Parte 2 – JSON PARSE

Quando o Padawan Aprende a Transformar Texto em Estruturas COBOL

Por Bellacosa Mainframe


"JSON é apenas texto. O verdadeiro poder está em fazer COBOL compreender esse texto como se fosse uma estrutura nativa do IBM Z."

Mestre Bellacosa Sysprog Jedi


Introdução

Na Parte 1, o Padawan descobriu algo surpreendente.

COBOL moderno fala JSON.

Aprendemos:

  • JSON GENERATE

  • UTF-8

  • CCSID

  • Enterprise COBOL 6.x

  • APIs REST

  • JSON em memória

  • Segurança básica

Agora chegamos ao momento em que o programa COBOL deixa de apenas produzir JSON.

Ele começa a entender JSON.

E isso acontece através de uma instrução quase mágica.

JSON PARSE


O que é JSON PARSE?

JSON PARSE é o tradutor universal.

Ele recebe.

Texto.

Transforma.

Em estruturas COBOL.


Visualmente.

JSON


↓

JSON PARSE


↓

WORKING STORAGE


↓

Programa COBOL

Exemplo.

Recebemos.

{
"id":100,

"nome":"Bellacosa",

"idade":52
}

COBOL deseja.

01 CLIENTE.

05 ID.

PIC 9(5).


05 NOME.

PIC X(30).


05 IDADE.

PIC 999.

JSON PARSE faz isso.

Automaticamente.


Quando surgiu?

IBM introduziu.

JSON PARSE

Enterprise COBOL

Version 6.


Mais utilizado hoje.

6.3

6.4

6.5


Mudou completamente.

Integrações.


Primeiro programa JSON PARSE

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

Buffer JSON

01 WS-JSON.

PIC X(500).

Passo 3

Popular

MOVE

'{"id":100,

"nome":"Bellacosa",

"idade":52}'


TO WS-JSON

Passo 4

Parse

JSON PARSE

WS-JSON

INTO WS-CLIENTE

Passo 5

Display

DISPLAY WS-ID.


DISPLAY WS-NOME.


DISPLAY WS-IDADE.

Resultado.

100


Bellacosa


52

Pronto.

JSON virou COBOL.


O que acontece internamente?

Compilador cria.

Parser interno.


Percorre.

Caractere.

Por caractere.


Reconhece.

Chaves.

Aspas.

Números.

Vetores.


Mapeia.

Campos.


Visualmente.

{


"id"



100



}


↓

COBOL


ID=100

Como funciona na memória?

JSON continua sendo texto.


Exemplo.

Buffer


500 bytes

Parser lê.


Move dados.


Para.

Working Storage.


Resultado.

WS-ID


100



WS-NOME


Bellacosa

Sem ponteiros.

Sem árvore.

Sem DOM.


Muito eficiente.


Objetos Aninhados

JSON suporta.

Estruturas.

Dentro.

De estruturas.


Exemplo.

{

"cliente":{

"id":1,

"nome":"Bellacosa"

}

}

COBOL.

01 CLIENTE.


05 DADOS.


10 ID.


10 NOME.

Muito elegante.


Arrays

Chegamos.

Ao lado divertido.


JSON.

{

"telefones":[

"1111",

"2222"

]

}

COBOL.

05 TELEFONES.

10 TEL OCCURS 10.


15 NUMERO.


PIC X(20).

Parser.

Preenche.


COUNT IN

Muito útil.


Exemplo.

JSON PARSE

WS-JSON


INTO WS-DADOS


COUNT IN WS-CONTADOR

Retorna.

Quantidade.

Itens.


Excelente.

Para.

Arrays.


ON EXCEPTION

Fundamental.

Nunca esquecer.


Exemplo.

JSON PARSE

WS-JSON


INTO WS-CLI


ON EXCEPTION


DISPLAY 'ERRO'

Padawan.

Sempre use.


Exemplo inválido

JSON.

{


"id":100


"nome":"Bellacosa"

Aspa.

Faltando.


Parser.

Falha.


ON EXCEPTION.

Executado.


JSON Malicioso

Poucos falam.

Mas existe.


Payload.

Gigante.


Exemplo.

50 MB.


Consome.

CPU.


Memória.


Tempo.


DoS.


Negação.

Serviço.


Boa prática

Validar.

Tamanho.


Exemplo.

IF WS-LEN > 100000

DISPLAY 'ERRO'

Muito recomendado.


Nomes diferentes

JSON.

Pode vir.

{

"customer_name":"Bellacosa"

}

COBOL.

05 WS-NOME.

Problema.


Precisamos.

Mapear.


Enterprise COBOL possui.

NAME OF.

SUPPRESS.


Falaremos.

Parte 3.


UTF8

Grande inimigo.


JSON.

UTF8.


COBOL.

EBCDIC.


José.

Pode quebrar.


Ç.

Ã.

É.


Atenção.

Sempre.


JSON NULL

JSON.

{


"nome":null
}

COBOL.

Não possui.

Null textual.


Precisamos.

Tratar.


Muito importante.


Performance

Excelente.


JSON PARSE.

É compilado.


Muito rápido.


Melhor.

Que parser.

Manual.


Evite.

UNSTRING


INSPECT


STRING

Desnecessário.


JSON PARSE.

Resolve.


Curiosidades

Muitos bancos.

Recebem.

Milhões.

JSON.

Por dia.


Aplicativos.

PIX.

Cartão.

Open Finance.


Tudo passa.

Por.

JSON.


E em muitos casos.

Existe.

COBOL.

No fim.

Da cadeia.


Debug

Exemplo.

DISPLAY WS-JSON

Muito útil.


Ou.

IBM Debug Tool.


Fault Analyzer.


Dump.


Quando usar?

Excelente.

REST

MQ

Kafka

zOS Connect

Mobile

Open Banking

PIX

Cloud


Quando evitar?

Arquivos internos.


VSAM.


Relatórios.


Batch tradicional.


Bellacosa Best Practices

Sempre

Use ON EXCEPTION


Sempre

Validar tamanho


Sempre

Testar UTF8


Sempre

Documentar JSON


Sempre

Versionar APIs


O Conselho do Mestre Bellacosa

JSON PARSE é provavelmente uma das maiores evoluções já incorporadas ao Enterprise COBOL.

Ele permite que um programa escrito há vinte ou trinta anos compreenda payloads produzidos por smartphones, microsserviços, plataformas OpenShift e aplicações espalhadas pela Internet.

O jovem Padawan deve perceber uma verdade importante.

JSON continua sendo apenas texto.

Mas JSON PARSE transforma esse texto em algo que COBOL entende profundamente.

Estruturas.

Campos.

Vetores.

Níveis.

OCCURS.

Variáveis.

E talvez essa seja a maior beleza do IBM Z moderno.

Ele não exige que o desenvolvedor abandone décadas de conhecimento.

Ele apenas oferece novas ferramentas.

E diz:

Continue programando em COBOL.

Continue usando seus níveis 01, 05 e 10.

Continue confiando em sua experiência.

Eu apenas ensinarei ao seu programa a compreender uma nova linguagem falada por toda a galáxia digital.


Continua na Parte 3

JSON GENERATE – Quando o Padawan Aprende a Construir APIs REST com COBOL, Criar Payloads Elegantes, Controlar Campos, Suprimir Dados e Falar com Microsserviços do Futuro.


quinta-feira, 18 de julho de 2024

JSON em COBOL no IBM Z: O Holocron das APIs Modernas – O Despertar do JSON - Parte I

 

Bellacosa Mainframe e o json no cobol parte I

JSON em COBOL no IBM Z: O Holocron das APIs Modernas

Parte 1 – O Despertar do JSON

Quando o Padawan Descobre que COBOL Pode Falar a Linguagem das APIs

Por Bellacosa Mainframe


"Por décadas, COBOL falou VSAM, DB2, IMS e MQ. Hoje ele também conversa com APIs, microsserviços e nuvens distantes. O idioma escolhido pela galáxia moderna chama-se JSON."

Mestre Bellacosa Sysprog Jedi


Introdução

Durante muitos anos, a vida do desenvolvedor COBOL era relativamente previsível.

Ele acordava.

Abria o ISPF.

Editava um programa.

Fazia um READ em um VSAM.

Consultava um DB2.

Chamava um CICS.

Enviava uma mensagem MQ.

Executava o JOB.

Analisava o SDSF.

E ia tomar café.

Então, por volta da década de 2010, uma nova criatura começou a aparecer nas especificações técnicas.

Ela vinha acompanhada de nomes estranhos.

REST.

OpenAPI.

Swagger.

Microservices.

Kubernetes.

OpenShift.

APIs.

Mobile.

Cloud.

E no meio de tudo isso, um pequeno formato textual se tornou praticamente o idioma universal da integração moderna.

Seu nome era:

JSON

(JavaScript Object Notation)

E então o jovem Padawan COBOL perguntou:

Mestre...

Quer dizer que meu programa COBOL de 30 anos pode conversar com um aplicativo Android?

Pode responder uma API REST?

Pode enviar dados para um microsserviço em OpenShift?

Pode participar de uma arquitetura moderna?

O mestre sorri.

Olha para o IBM z17.

E responde:

Sim.

E o idioma utilizado para essa conversa provavelmente será JSON.


O que é JSON?

JSON significa:

JavaScript Object Notation.

Mas não se deixe enganar pelo nome.

Hoje JSON pertence ao mundo inteiro.

Não é apenas JavaScript.

É utilizado por:

  • COBOL

  • Java

  • Python

  • Go

  • Rust

  • Node.js

  • C#

  • Kotlin

  • Swift

  • APIs REST

  • OpenShift

  • Kafka

  • IBM MQ

  • z/OS Connect

Praticamente tudo.


Exemplo simples

Um cliente.

Em COBOL.

Temos:

01 WS-CLIENTE.

   05 WS-ID.

      PIC 9(5).

   05 WS-NOME.

      PIC X(30).

   05 WS-IDADE.

      PIC 999.

Em JSON.

{
  "id":100,
  "nome":"Bellacosa",
  "idade":52
}

Mesmo dado.

Representações diferentes.


Por que JSON venceu XML?

Muitos veteranos perguntam:

Mestre...

Mas XML não fazia isso antes?

Sim.

Fazia.

E ainda faz.

Mas JSON trouxe algumas vantagens.


XML

<cliente>

<id>100</id>

<nome>Bellacosa</nome>

</cliente>

JSON

{
"id":100,
"nome":"Bellacosa"
}

Menor.

Mais leve.

Mais rápido.

Mais amigável.


JSON chegou tarde ao COBOL?

Sim.

Durante muitos anos, programadores precisavam utilizar:

Parsers.

Ferramentas externas.

Java.

C.

SAX.

DOM.

Bibliotecas proprietárias.

Era desagradável.


Quando surgiu suporte nativo?

IBM introduziu suporte moderno em:

Enterprise COBOL V6

Especialmente.

COBOL 6.1

6.2

6.3

6.4

6.5


Duas instruções mudaram tudo.

JSON PARSE

JSON GENERATE

Essas duas instruções transformaram COBOL em um cidadão de primeira classe no universo das APIs.


O que é JSON PARSE?

É o tradutor.

Recebe texto.

Produz estruturas COBOL.


Visualmente.

JSON


↓

JSON PARSE


↓

WORKING STORAGE

O que é JSON GENERATE?

Faz o contrário.

WORKING STORAGE


↓

JSON GENERATE


↓

Texto JSON

Primeiro exemplo do Padawan

Passo 1

Criar estrutura.

01 WS-CLIENTE.

   05 WS-ID.

      PIC 9(5).

   05 WS-NOME.

      PIC X(30).

   05 WS-IDADE.

      PIC 999.

Passo 2

Criar buffer.

01 WS-JSON.

PIC X(200).

Passo 3

Popular dados.

MOVE 100

TO WS-ID


MOVE 'BELLACOSA'

TO WS-NOME


MOVE 52

TO WS-IDADE

Passo 4

Gerar JSON.

JSON GENERATE WS-JSON

FROM WS-CLIENTE

Passo 5

Display.

DISPLAY WS-JSON

Resultado.

{
"id":100,
"nome":"BELLACOSA",
"idade":52
}

Pronto.

COBOL falando JSON.


Como funciona internamente?

Aqui começa a magia.

O compilador gera código otimizado.

Percorre estrutura COBOL.

Mapeia campos.

Converte.

Monta texto.

Tudo automaticamente.


Visualmente.

WORKING STORAGE


↓

Field Scanner


↓

Serializer


↓

UTF-8


↓

JSON Buffer

Como JSON fica na memória?

JSON é texto.

Normalmente.

UTF-8.


Exemplo.

{"nome":"Bellacosa"}

Na memória.

7B

22

6E

6F

6D

65

Bytes.


CCSID

Muito importante.

Padawan frequentemente esquece.

IBM Z trabalha com:

EBCDIC.

JSON trabalha com:

UTF-8.


Complicação.


Exemplo.

COBOL.

EBCDIC

API.

UTF8

Conversão necessária.


Exemplo

Nome.

José


UTF8.

Dois bytes.


EBCDIC.

Outro código.


Pode quebrar.


Segurança

Muito importante.

JSON pode ser perigoso.


Exemplo.

Payload enorme.

{
"clientes":[

100000 itens

]
}

Pode consumir.

CPU.

Memória.

Tempo.


Boa prática.

Validar tamanho.


JSON Injection

Também existe.


Nunca confiar.

Em entrada.

Externa.


Sempre validar.


Arrays

JSON suporta.

{
"clientes":[

{"id":1},

{"id":2}

]
}

COBOL.

OCCURS.


Excelente integração.


Objetos aninhados

{
"cliente":{

"id":1,

"endereco":{

"cidade":"SP"

}

}
}

COBOL.

Níveis.


Muito elegante.


Curiosidade

JSON PARSE.

Não cria ponteiros.

Não cria DOM.

Não cria árvore.


Preenche estruturas COBOL.

Diretamente.


Extremamente eficiente.


Performance

Muito boa.


JSON GENERATE.

É rápido.


Muito mais rápido.

Do que escrever.

String manualmente.


Exemplo ruim.

STRING

'{'

'"nome":"'

WS-NOME

'"'

'}'

Terrível.


JSON GENERATE.

Melhor.


Quando usar?

Excelente para.


APIs.

REST.

MQ.

Kafka.

OpenShift.

Mobile.

Cloud.

Microsserviços.


Quando evitar?


Arquivos internos.

VSAM.

Batch puro.

Relatórios.


Curiosidade Bellacosa

Muitos programas COBOL modernos já trabalham com JSON diariamente.

E boa parte dos usuários finais jamais imagina.

Ao abrir um aplicativo bancário.

Consultar saldo.

Fazer PIX.

Solicitar empréstimo.

Atualizar cadastro.

Frequentemente existe um programa COBOL recebendo JSON silenciosamente em algum lugar do IBM Z.


O Conselho do Mestre Bellacosa

Durante décadas, COBOL foi visto como uma linguagem presa a cartões perfurados, arquivos sequenciais e relatórios impressos.

JSON mudou essa percepção.

JSON permitiu que programas escritos há décadas conversassem com aplicações móveis, microsserviços em OpenShift, APIs em nuvem e plataformas digitais espalhadas pela galáxia tecnológica.

E talvez essa seja a maior lição desta primeira jornada.

COBOL não precisou deixar de ser COBOL.

Não precisou abandonar sua robustez.

Não precisou reescrever milhões de linhas.

Ele simplesmente aprendeu um novo idioma.

E hoje pode dizer:

Eu ainda sou COBOL.

Ainda processo milhões de transações por segundo.

Ainda executo no IBM Z.

Mas agora também falo JSON.

E posso conversar com praticamente qualquer sistema da galáxia.


Continua na Parte 2

JSON PARSE – Transformando Texto em Estruturas COBOL: Arrays, Objetos Aninhados, OCCURS, Tratamento de Erros e o Lado Sombrio dos Payloads Maliciosos.


segunda-feira, 26 de junho de 2023

JSON no COBOL Mainframe : O Guia Definitivo para um Programador Padawan Entender Como o IBM Z Conversa com o Mundo Moderno

 

Bellacosa Mainframe e o json no cobol

☕ Um Café no Bellacosa Mainframe

JSON no COBOL Mainframe

O Guia Definitivo para um Programador Padawan Entender Como o IBM Z Conversa com o Mundo Moderno

"O COBOL nunca teve dificuldade em processar dados. O desafio sempre foi aprender novos idiomas. JSON é apenas mais um idioma."


Introdução

Durante décadas, o mundo Mainframe conversou utilizando formatos extremamente bem definidos.

Arquivos VSAM.

Registros fixos.

Copybooks.

Layouts COBOL.

MQ.

CICS COMMAREA.

IMS.

Tudo extremamente organizado.

Enquanto isso, o restante do mercado passou a utilizar um formato muito mais simples para troca de informações:

JSON (JavaScript Object Notation).

Hoje praticamente toda API REST utiliza JSON.

Aplicativos móveis.

Sites.

Microsserviços.

Open Banking.

Pix.

Cloud.

Inteligência Artificial.

ChatGPT.

IBM watsonx.

Todos utilizam JSON.

E é justamente por isso que um programador COBOL moderno precisa dominar este formato.

A boa notícia?

Desde o Enterprise COBOL V6, a IBM adicionou suporte nativo através dos comandos:

  • JSON PARSE

  • JSON GENERATE

Sem bibliotecas externas.

Sem escrever um parser manual.

Sem sofrimento.


O que é JSON?

JSON é simplesmente uma forma de representar dados usando pares:

nome : valor

Exemplo:

{
   "cliente": "João",
   "idade": 35,
   "saldo": 1250.75,
   "ativo": true
}

Perceba que ele lembra um registro COBOL.

No COBOL escreveríamos:

01 CLIENTE.
   05 NOME        PIC X(30).
   05 IDADE       PIC 9(3).
   05 SALDO       PIC 9(7)V99.
   05 ATIVO       PIC X.

A diferença é apenas o formato.


JSON x Copybook

Um copybook descreve campos.

JSON descreve informações.

Copybook:

05 NOME PIC X(30).

JSON

"nome":"Maria"

A IBM simplesmente faz o mapeamento entre ambos.


Estrutura básica

Um objeto:

{
   "nome":"Maria",
   "idade":28
}

Um vetor

{
   "telefones":[
      "1111",
      "2222"
   ]
}

Objeto dentro de objeto

{
   "cliente":{
      "nome":"Carlos",
      "cidade":"São Paulo"
   }
}

Tudo isso pode ser representado em COBOL.


Como declarar no COBOL

01 WS-CLIENTE.

   05 WS-NOME          PIC X(30).
   05 WS-IDADE         PIC 999.
   05 WS-SALDO         PIC 9(7)V99.
   05 WS-ATIVO         PIC X.

Agora um campo contendo o JSON.

01 WS-JSON.

   05 WS-DADOS PIC X(5000).

Este será o buffer utilizado para leitura ou gravação.


Lendo JSON

Imagine receber:

{
   "nome":"Luke",
   "idade":22,
   "saldo":1500.50,
   "ativo":"S"
}

Basta executar:

JSON PARSE WS-DADOS
     INTO WS-CLIENTE
END-JSON

Pronto.

A IBM faz todo o trabalho.

Após isso:

WS-NOME = LUKE

WS-IDADE = 22

WS-SALDO = 1500.50

WS-ATIVO = S

Sem IF.

Sem UNSTRING.

Sem parser.


Programa exemplo de leitura

IDENTIFICATION DIVISION.
PROGRAM-ID. JSONREAD.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 WS-JSON.
   05 WS-DADOS PIC X(500).

01 WS-CLIENTE.
   05 WS-NOME PIC X(30).
   05 WS-IDADE PIC 999.
   05 WS-SALDO PIC 9(7)V99.
   05 WS-ATIVO PIC X.

PROCEDURE DIVISION.

MOVE
'{"nome":"Luke","idade":22,"saldo":1500.50,"ativo":"S"}'
TO WS-DADOS

JSON PARSE WS-DADOS
    INTO WS-CLIENTE
END-JSON

DISPLAY WS-NOME
DISPLAY WS-IDADE
DISPLAY WS-SALDO
DISPLAY WS-ATIVO

STOP RUN.

Como funciona internamente

O parser da IBM:

  1. lê caractere por caractere

  2. identifica as chaves

  3. procura o campo correspondente

  4. converte texto para número

  5. grava nas variáveis COBOL

Tudo automaticamente.


Gravando JSON

O caminho inverso também existe.

Suponha:

MOVE "ANA" TO WS-NOME

MOVE 30 TO WS-IDADE

MOVE 999.99 TO WS-SALDO

MOVE "S" TO WS-ATIVO

Agora:

JSON GENERATE WS-DADOS
    FROM WS-CLIENTE
END-JSON

Resultado:

{
   "nome":"ANA",
   "idade":30,
   "saldo":999.99,
   "ativo":"S"
}

Programa exemplo de geração

IDENTIFICATION DIVISION.
PROGRAM-ID. JSONWRITE.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 WS-DADOS PIC X(1000).

01 WS-CLIENTE.

   05 WS-NOME PIC X(30).
   05 WS-IDADE PIC 999.
   05 WS-SALDO PIC 9(7)V99.
   05 WS-ATIVO PIC X.

PROCEDURE DIVISION.

MOVE "ANA" TO WS-NOME

MOVE 30 TO WS-IDADE

MOVE 1500.75 TO WS-SALDO

MOVE "S" TO WS-ATIVO

JSON GENERATE WS-DADOS
    FROM WS-CLIENTE
END-JSON

DISPLAY WS-DADOS

STOP RUN.

Gravando em arquivo

Após gerar o JSON basta gravá-lo normalmente.

WRITE REGISTRO-SAIDA

ou

STRING

WS-DADOS

DELIMITED BY SIZE

INTO REGISTRO

END-STRING

WRITE REGISTRO

Pode ser salvo em:

  • Sequential File

  • VSAM ESDS

  • UNIX USS

  • MQ

  • FTP

  • API REST

  • Kafka

  • IBM MQ

  • z/OS Connect


Tratando erros

Nunca assuma que o JSON está correto.

Utilize:

JSON PARSE
...
ON EXCEPTION

DISPLAY "JSON INVALIDO"

NOT ON EXCEPTION

DISPLAY "SUCESSO"

END-JSON

Isso evita que dados inválidos sejam processados.


Exemplo completo

JSON PARSE WS-DADOS

INTO WS-CLIENTE

ON EXCEPTION

MOVE "ERRO" TO WS-STATUS

NOT ON EXCEPTION

MOVE "OK" TO WS-STATUS

END-JSON

Arrays

JSON

{
 "produtos":[
   "Mouse",
   "Teclado",
   "Monitor"
 ]
}

COBOL

05 PRODUTO OCCURS 10 TIMES.

   10 NOME PIC X(30).

A IBM faz o relacionamento automaticamente quando os nomes e a estrutura são compatíveis.


Objetos aninhados

JSON

{
 "cliente":{
   "nome":"Carlos",
   "cidade":"Campinas"
 }
}

COBOL

01 CLIENTE.

   05 DADOS.

      10 NOME PIC X(30).

      10 CIDADE PIC X(20).

Valores opcionais

Nem sempre todos os campos existirão.

Exemplo

{
   "nome":"Pedro"
}

Sem idade.

Sem saldo.

Os campos COBOL permanecerão com seus valores iniciais (SPACES, ZEROS ou VALUE), por isso é importante inicializar a estrutura antes do JSON PARSE, geralmente com:

INITIALIZE WS-CLIENTE

Campos numéricos

Muito cuidado.

JSON

"idade":"ABC"

Jamais poderá alimentar

PIC 999

O parser gerará exceção.


Decimais

JSON

123.45

COBOL

PIC 9(5)V99

O ponto decimal é interpretado automaticamente conforme as regras do compilador e da representação numérica.


Booleanos

JSON

true
false

COBOL não possui um tipo booleano tradicional.

Uma prática comum é utilizar:

05 ATIVO PIC X.
   88 CLIENTE-ATIVO VALUE "S".
   88 CLIENTE-INATIVO VALUE "N".

Ou mapear para indicadores específicos conforme o padrão da aplicação.


Controle de tamanho

Um erro comum dos iniciantes.

Criar

PIC X(100)

para um JSON de

500 caracteres.

Resultado?

Truncamento.

Sempre dimensione com folga ou utilize áreas compatíveis com o tamanho esperado.


Performance

O parser da IBM é extremamente eficiente.

Mesmo assim:

  • Evite gerar JSON gigantescos.

  • Não faça PARSE repetidamente da mesma informação.

  • Reutilize áreas de trabalho.

  • Inicialize apenas quando necessário.

  • Evite cópias desnecessárias do buffer.


Armadilhas

Nomes diferentes

JSON

customerName

COBOL

CLIENTE-NOME

Não haverá correspondência automática sem mecanismos de mapeamento.


Campos obrigatórios

Nem sempre existirão.

Sempre valide.


Tipos incompatíveis

Número enviado como texto.

Texto enviado como número.

Boolean enviado como string.

São causas clássicas de erro.


Caracteres especiais

JSON utiliza UTF-8 com frequência.

Aplicações tradicionais em z/OS podem utilizar EBCDIC.

Em integrações, pode ser necessário converter a codificação antes do JSON PARSE ou após o JSON GENERATE.


Riscos

Os maiores riscos não estão no JSON.

Estão nos dados.

Por exemplo:

  • JSON malformado.

  • Dados incompletos.

  • Campos inesperados.

  • Tamanho excessivo.

  • Conteúdo malicioso.

  • Falhas de conversão de caracteres.

  • Exposição de informações sensíveis em logs.

Valide sempre a entrada e registre apenas o necessário.


Vantagens

Utilizar JSON no Mainframe oferece inúmeras vantagens:

  • integração simples com APIs REST;

  • comunicação natural com aplicações Java, .NET, Python e Node.js;

  • suporte a microsserviços;

  • facilidade de integração com nuvem;

  • menor necessidade de conversões proprietárias;

  • manutenção mais simples;

  • suporte nativo do Enterprise COBOL;

  • excelente desempenho quando comparado a parsers desenvolvidos manualmente.


Onde ele é utilizado?

Hoje praticamente em todos os projetos modernos.

  • Open Banking

  • PIX

  • Internet Banking

  • Aplicativos Mobile

  • APIs REST

  • IBM z/OS Connect

  • IBM API Connect

  • IBM MQ

  • Kafka

  • Cloud

  • Inteligência Artificial

  • IBM watsonx

  • Integrações híbridas entre IBM Z e plataformas distribuídas


Boas práticas

Um Padawan COBOL deve criar alguns hábitos desde o primeiro dia:

  • Inicialize as estruturas antes do processamento (INITIALIZE).

  • Utilize ON EXCEPTION e trate todos os erros.

  • Dimensione corretamente o buffer JSON.

  • Valide obrigatoriedade e formato dos campos.

  • Documente o layout esperado.

  • Mantenha os nomes consistentes entre JSON e estrutura COBOL sempre que possível.

  • Evite expor informações confidenciais em arquivos de log.

  • Teste com JSONs válidos, inválidos, incompletos e com dados extremos.


Conclusão

Durante muito tempo existiu o mito de que o Mainframe "não falava JSON". Isso deixou de ser verdade há anos. O Enterprise COBOL trouxe comandos nativos que simplificam enormemente a leitura e a geração desse formato, permitindo que aplicações escritas há décadas conversem com APIs modernas, serviços em nuvem, aplicações móveis e plataformas de Inteligência Artificial.

Para um Programador Padawan, aprender JSON significa abrir uma porta para o futuro sem abandonar os fundamentos que fazem do COBOL uma das linguagens mais confiáveis do mundo. Quem domina registros, copybooks e validação de dados aprenderá JSON rapidamente. A diferença está apenas na forma de representar a informação.

O verdadeiro desafio não é escrever JSON PARSE ou JSON GENERATE. É compreender a estrutura dos dados, validar corretamente o conteúdo recebido, tratar exceções, garantir compatibilidade de tipos e proteger informações sensíveis. Esses princípios sempre fizeram parte do desenvolvimento em Mainframe e continuam válidos na era das APIs.

No fim das contas, JSON não substitui o COBOL. Ele amplia sua capacidade de comunicação. E um IBM Z que conversa com o mundo moderno continua fazendo aquilo que sempre fez melhor: processar dados com segurança, desempenho e confiabilidade.


quinta-feira, 12 de maio de 2022

O Arquivo Secreto do JSON : Os Recursos Avançados do Enterprise COBOL que Quase Ninguém Aprende...

 

Bellacosa Mainframe e o arquivo secreto do json

☕ Um Café no Bellacosa Mainframe

O Arquivo Secreto do JSON

Os Recursos Avançados do Enterprise COBOL que Quase Ninguém Aprende... Mas que Movem Bilhões de Transações Todos os Dias

"Existem programadores que sabem escrever COBOL. Existem programadores que sabem integrar COBOL ao mundo moderno. A diferença entre eles pode ser apenas uma instrução chamada JSON PARSE."


Prólogo — A Porta Número 3270

Era quase meia-noite.

As luzes do CPD permaneciam acesas como sempre.

O z16 processava milhões de transações silenciosamente. Em algum lugar daquele prédio, centenas de aplicações CICS conversavam entre si, acessando DB2, VSAM, MQ e dezenas de microsserviços espalhados pela nuvem.

Na tela verde do terminal 3270, um jovem Programador Padawan acabara de receber sua primeira missão.

Integrar um programa COBOL com uma API REST.

A documentação dizia apenas:

"Receber um JSON."

Somente isso.

Nenhuma explicação.

Nenhum diagrama.

Nenhuma pista.

Foi naquele momento que ele descobriu que o maior mistério do Mainframe moderno não era o COBOL.

Era o JSON.

Pegue seu café.

Hoje vamos abrir um dos arquivos mais secretos do Enterprise COBOL.


Quando o IBM Z Aprendeu um Novo Idioma

Durante décadas o Mainframe falava uma linguagem extremamente organizada.

Cada campo possuía tamanho fixo.

Cada byte tinha uma posição.

Cada registro obedecia um layout rígido.

Exemplo:

Cliente........30 bytes
Conta..........10 bytes
Saldo..........09 bytes

Nada podia sair do lugar.

Era como uma biblioteca onde todos os livros ocupavam exatamente a mesma prateleira.

Então surgiu a Internet.

Depois vieram smartphones.

Cloud.

Microsserviços.

Open Banking.

PIX.

Aplicativos.

Inteligência Artificial.

Todos falavam uma língua completamente diferente.

JSON.

Ao invés de posições fixas...

Possuíam nomes.

Ao invés de layouts...

Possuíam objetos.

Ao invés de registros...

Possuíam documentos.

Durante algum tempo muitos acreditaram que COBOL jamais conversaria naturalmente com esse novo mundo.

Estavam completamente enganados.


O Nascimento do JSON PARSE

A IBM resolveu o problema adicionando dois comandos revolucionários ao Enterprise COBOL:

JSON PARSE

e

JSON GENERATE

Essas duas instruções mudaram completamente a forma como aplicações COBOL se integram ao restante do mercado.

Hoje um programa escrito há quarenta anos pode conversar com uma aplicação Android, um sistema em Java, um microsserviço em Go, uma aplicação Python ou um modelo de Inteligência Artificial.

Sem precisar reinventar a roda.


O Grande Tradutor Invisível

Imagine um tradutor simultâneo.

Uma pessoa fala japonês.

Outra fala português.

O tradutor escuta.

Converte.

Entrega a mensagem.

É exatamente isso que o parser faz.

Ele recebe:

{
   "nome":"Maria",
   "idade":30
}

e transforma automaticamente em:

05 WS-NOME.
05 WS-IDADE.

Nenhuma linha extra de código.

Nenhum parser artesanal.

Nenhuma rotina gigantesca.


O Que Acontece Dentro do Enterprise COBOL?

Pouca gente sabe.

Mas internamente o compilador cria uma estrutura extremamente sofisticada.

Quando encontra:

JSON PARSE

ele gera código capaz de:

✔ analisar caractere por caractere;

✔ identificar objetos;

✔ validar aspas;

✔ converter números;

✔ interpretar arrays;

✔ localizar campos;

✔ detectar erros;

✔ copiar os valores para a Working-Storage.

Tudo isso acontece em microssegundos.


JSON PARSE WITH DETAIL

Aqui começamos a entrar na parte que muitos programadores nunca utilizam.

Imagine receber um JSON com erro.

Sem WITH DETAIL.

Você sabe apenas que falhou.

Com:

JSON PARSE WS-JSON

INTO WS-DADOS

WITH DETAIL

ON EXCEPTION

DISPLAY "ERRO"

END-JSON

o compilador produz informações muito mais ricas sobre o ponto exato da falha.

Isso facilita enormemente o diagnóstico em produção.

Em grandes bancos, localizar rapidamente o campo inválido pode significar minutos em vez de horas de investigação.

☕ Curiosidade Bellacosa: muitos incidentes de integração não são causados pelo COBOL, mas por mudanças discretas em contratos JSON feitos por equipes externas sem comunicação adequada.


NAME OF — Quando Dois Mundos Usam Nomes Diferentes

Imagine o seguinte cenário.

API:

customerName

COBOL:

CLIENTE-NOME

Os nomes não coincidem.

Em vez de alterar um copybook utilizado por dezenas de programas, o Enterprise COBOL permite realizar o mapeamento de nomes com recursos como NAME OF, preservando a estrutura interna da aplicação.

Isso é extremamente útil quando uma API segue convenções como camelCase e o ambiente Mainframe utiliza nomes tradicionais em maiúsculas.


SUPPRESS — O Segredo dos JSONs Elegantes

Imagine um cadastro.

Telefone

Email

Fax

Todos vazios.

Sem SUPPRESS.

{
   "telefone":"",
   "email":"",
   "fax":""
}

Com SUPPRESS.

{
}

Ou apenas:

{
   "nome":"Luke"
}

Arquivos menores.

Menos tráfego.

Mais desempenho.

Menor consumo de banda.

Em ambientes de alta escala, alguns poucos bytes economizados por mensagem representam milhões de bytes ao longo do dia.


COUNT IN — Descobrindo Quantos Objetos Foram Processados

Imagine receber uma lista de clientes.

[
...
]

Como saber quantos registros realmente foram convertidos?

Entra em cena:

COUNT IN

Ele informa quantos elementos foram efetivamente processados.

Extremamente útil para:

  • auditoria;

  • logs;

  • validação;

  • conferência de cargas;

  • integração batch.


CONVERTING — O Pequeno Mágico

Nem sempre dois sistemas utilizam os mesmos valores.

API:

true

COBOL:

"S"

Outro sistema:

1

Outro:

"ATIVO"

O recurso CONVERTING permite realizar essas transformações de forma controlada, reduzindo código repetitivo e centralizando regras de conversão.


Arrays Complexos — O Labirinto do Minotauro

É aqui que muitos iniciantes se perdem.

Observe:

Clientes

↓

Telefones

↓

Endereços

↓

Documentos

Objetos dentro de objetos.

Arrays dentro de arrays.

No COBOL isso é representado através de grupos e OCCURS.

CLIENTE

↓

ENDERECOS OCCURS

↓

TELEFONES OCCURS

O parser percorre cada nível da estrutura, preenchendo automaticamente as tabelas.

É como explorar um enorme arquivo de fichas organizado em gavetas, pastas e divisórias.


OCCURS DEPENDING ON

Nem sempre sabemos quantos registros existirão.

Hoje chegam cinco clientes.

Amanhã cinquenta.

Depois mil.

O OCCURS DEPENDING ON permite estruturas variáveis, mas exige atenção redobrada: o contador deve refletir corretamente a quantidade de elementos, caso contrário leituras incompletas ou acessos inválidos podem ocorrer.


O Fantasma do UTF-8

Existe um fantasma que assombra integrações.

Seu nome:

UTF-8.

O Mainframe tradicional trabalha naturalmente em EBCDIC.

Grande parte da Internet utiliza UTF-8.

Quando a conversão é esquecida...

acentos desaparecem.

Caracteres ficam ilegíveis.

Nomes tornam-se símbolos estranhos.

Antes de culpar o JSON, verifique sempre a codificação.

Esse detalhe já consumiu incontáveis horas de troubleshooting em ambientes corporativos.


O Castelo do z/OS Connect

Agora imagine o seguinte cenário.

Aplicativo.

Internet.

API REST.

z/OS Connect.

CICS.

COBOL.

DB2.

Esse é um dos caminhos mais comuns atualmente.

O z/OS Connect funciona como um diplomata.

Ele recebe JSON.

Traduz.

Entrega ao programa COBOL.

Depois faz exatamente o caminho inverso.

O desenvolvedor trabalha na lógica de negócio enquanto a infraestrutura cuida do protocolo.


CICS e JSON

Durante muito tempo o CICS falava principalmente COMMAREA.

Hoje ele também conversa utilizando:

CHANNEL.

CONTAINER.

JSON.

Isso permitiu criar aplicações muito maiores do que os antigos limites impostos por COMMAREA.

Além disso, o modelo de canais facilita integrações complexas e transporte de documentos maiores.


APIs REST — O Novo Correio do Mainframe

As APIs REST funcionam como um serviço postal moderno.

GET.

Buscar.

POST.

Criar.

PUT.

Atualizar.

DELETE.

Excluir.

O JSON é a carta.

O HTTP é o carteiro.

O COBOL continua sendo o especialista que decide o que fazer quando a carta chega.


O Caminho de Uma Transação

Imagine um PIX.

Aplicativo.

API.

Gateway.

z/OS Connect.

CICS.

JSON PARSE.

COBOL.

DB2.

JSON GENERATE.

Resposta.

Tudo isso pode acontecer em poucos milissegundos.

Enquanto você termina de piscar os olhos, milhares de mensagens semelhantes atravessaram esse caminho.


Segurança Nunca É Opcional

Nem todo JSON recebido deve ser considerado confiável.

Boas práticas incluem:

  • validar tamanho do payload;

  • tratar exceções com ON EXCEPTION;

  • inicializar estruturas antes do parse;

  • rejeitar campos inesperados quando necessário;

  • proteger informações sensíveis;

  • evitar registrar senhas, tokens ou números completos de cartões em logs.

Segurança começa antes mesmo da primeira linha de lógica de negócio.


Performance — O Mito do JSON Lento

Existe quem diga que JSON é lento.

Depende.

O parser nativo do Enterprise COBOL foi otimizado para esse trabalho.

Na maioria dos casos, o gargalo não está no processamento do JSON, mas na comunicação de rede, no acesso ao banco de dados ou em integrações externas.

Um bom desenho de aplicação, buffers bem dimensionados e estruturas adequadas fazem enorme diferença.


Armadilhas Que Todo Padawan Enfrenta

  • Buffer pequeno para armazenar o JSON.

  • Campos numéricos recebendo texto.

  • Datas em formatos diferentes.

  • Arrays maiores do que o OCCURS previsto.

  • Objetos opcionais não tratados.

  • Mudanças silenciosas em contratos de API.

  • Esquecimento da conversão EBCDIC ↔ UTF-8.

  • Logs excessivos em produção.

Reconhecer essas armadilhas cedo economiza muitas madrugadas de plantão.


O Checklist do Mestre Jedi do JSON

Antes de colocar uma aplicação em produção, pergunte:

  • O JSON foi validado?

  • Há tratamento ON EXCEPTION?

  • Os buffers suportam o maior payload esperado?

  • Os campos opcionais foram considerados?

  • A codificação está correta?

  • O contrato da API está documentado?

  • Os logs preservam a privacidade dos dados?

  • O desempenho foi testado com volumes reais?

Se todas as respostas forem "sim", você está muito mais próximo de uma implantação tranquila.


☕ Easter Egg Bellacosa

Nas antigas revistas de mistério noir dos anos 1950, sempre existia um personagem discreto que parecia apenas observar a história. No final, descobria-se que ele era a peça-chave de toda a investigação.

No universo do Mainframe moderno, o JSON desempenha um papel semelhante.

Ele raramente aparece nas manchetes. Quase ninguém comenta sobre ele em reuniões executivas. Porém, é esse "mensageiro silencioso" que leva ordens, saldos, cadastros, pagamentos, consultas e confirmações entre sistemas espalhados pelo planeta.

Da próxima vez que você abrir um aplicativo bancário e visualizar um saldo em segundos, lembre-se: em algum lugar do caminho, um programa COBOL pode ter recebido um JSON, transformado aquela mensagem em estruturas internas, consultado um banco de dados e respondido antes mesmo que você terminasse de tocar a tela do celular.


Conclusão — O Verdadeiro Mistério Nunca Foi o JSON

Quando os primeiros programadores COBOL surgiram, ninguém imaginava que décadas depois seus programas conversariam com smartphones, APIs REST, aplicações em nuvem e modelos de Inteligência Artificial.

Mas a essência permaneceu exatamente a mesma.

Receber dados.

Validar.

Processar.

Garantir integridade.

Responder com segurança.

O JSON não substituiu o COBOL.

Ele apenas abriu uma nova porta.

E, como todo bom investigador das antigas histórias noir descobriria, o segredo nunca esteve na porta.

O segredo sempre esteve em compreender o que existe do outro lado.

O Programador Padawan que domina JSON PARSE, JSON GENERATE, WITH DETAIL, NAME OF, SUPPRESS, COUNT IN, CONVERTING, arrays complexos e integrações com CICS e z/OS Connect deixa de ser apenas um mantenedor de sistemas legados. Ele se torna um tradutor entre dois mundos: a robustez do IBM Z e a velocidade do ecossistema digital moderno.

Enquanto bilhões de transações continuarem atravessando o planeta todos os dias, haverá espaço para profissionais capazes de unir tradição e inovação. E talvez esse seja o maior mistério do Mainframe: a tecnologia mais antiga em produção continua encontrando novas maneiras de conversar com o futuro.

Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...