COBOL - Comando - JSON GENERATE - www.cadcobol.com.br
A instrução JSON GENERATE converte dados para o formato JSON.
Quando o identifier-1 faz referência a um item do grupo national, o identifier-1 é processado como um item de dados elementar da categoria nacional. Quando o identifier-1 faz referência a um item de grupo alfanumérico, o identifier-1 é tratado como se fosse um item de dados elementar da categoria alfanumérica.
O identifier-1 não deve ser definido com a cláusula JUSTIFIED e não pode ser um identificador de função. O identifier-1 pode ser subscrito ou modificado por referência.
O identifier-1 não deve se sobrepor ao identifier-2 ou ao identifier-3.
O identifier-1 não deve ser um item de grupo de comprimento dinâmico ou um item elementar de comprimento dinâmico.
O texto JSON gerado é codificado em UTF-8 (CCSID 1208), a menos que o identifier-1 seja da categoria nacional; nesse caso, ele é codificado em UTF-16 big-Endian (CCSID 1200). A conversão dos valores dos dados e literais da frase NAME é feita de acordo com a opção CODEPAGE do compilador em vigor para a compilação. A conversão de nomes de dados originais é sempre feita usando o CCSID 1140.
O identifier-1 deve ser grande o suficiente para conter o texto JSON gerado. Normalmente, ele deve ter de 2 a 3 vezes o tamanho do identifier-2, dependendo dos comprimentos dos nomes de dados no identifier-2. Se o identifier-1 não for grande o suficiente, existe uma condição de exceção no final da instrução JSON GENERATE. Se a frase COUNT for especificada, o identifier-3 conterá o número de unidades de codificação de caracteres que foram realmente geradas.
O identifier-2 não pode ser um identificador de função ou ser modificado por referência, mas pode ser subscrito.
o identifier-2 não deve se sobrepor ao identifier-1 ou ao identifier-3.
O identifier-2 pode não ser um item de grupo de comprimento dinâmico ou um item elementar de comprimento dinâmico.
A entrada de descrição de dados para o identifier-2 não deve conter uma cláusula RENAMES.
Os seguintes itens de dados especificados pelo identifier-2 são ignorados pela instrução JSON GENERATE:
Todos os itens de dados especificados pelo identifier-2 que não são ignorados de acordo com as regras anteriores devem atender às seguintes condições:
Por exemplo, considere a seguinte declaração de dados:
01 STRUCT. 02 STAT PIC X(004). 02 IN-AREA PIC X(100). 02 OK-AREA REDEFINES IN-AREA. 03 FLAGS PIC X(001). 03 PIC X(003). 03 COUNTER USAGE COMP-5 PIC S9(09). 03 ASFNPTR REDEFINES COUNTER USAGE FUNCTION-POINTER. 03 UNREFERENCED PIC X(092). 02 NG-AREA1 REDEFINES IN-AREA. 03 FLAGS PIC X(001). 03 PIC X(003). 03 PTR USAGE POINTER. 03 ASNUM REDEFINES PTR USAGE COMP-5 PIC S9(9). 03 PIC X(092). 02 NG-AREA2 REDEFINES IN-AREA. 03 FN-CODE PIC X(001). 03 UNREFERENCED PIC X(003). 03 QTYONHAND USAGE BINARY PIC 9(005). 03 DESC USAGE NATIONAL PIC N(040). 03 UNREFERENCED PIC X(012).
Os seguintes itens de dados do exemplo podem ser especificados como identifier-2:
Os seguintes itens de dados não podem ser especificados como identifier-2:
o identifier-3 não deve se sobrepor ao identifier-1, identifier-2, identifier-4 ou identifier-5.
{"identifier-2":{}}
02 B. 03 C OCCURS 0 TO 2 DEPENDING J. 04 D PIC X. 02 E PIC X.
Se o objeto ODO j contiver o valor 2 e o grupo a for preenchido com todos os '_', a instrução JSON GENERATE x FROM a (sem a frase SUPPRESS) produzirá o seguinte texto JSON:
{"a":{"b":{"c":[{"d":"_"},{"d":"_"}]},"e":"_"}}
{"a":{"e":"_"}}
{"a":{}}
{"table-name":[]}
{"a":{"b":{"c":[]},"e":"_"}}
Os componentes de uma tabela de grupo de ocorrência zero não contribuem com nenhum texto JSON para a saída. Como resultado, uma frase SUPPRESS que especificou apenas d não teria efeito sobre essa saída gerada.
Suprimir os itens de dados b ou c, e e, que contribuem com texto JSON, tem o mesmo resultado que para ocorrências diferentes de zero da tabela c, ilustradas acima.
Se a frase ON EXCEPTION for especificada, o controle será transferido para imperative-statement-1. Se a frase ON EXCEPTION não for especificada, a frase NOT ON EXCEPTION, se houver, será ignorada e o controle será transferido para o final da instrução JSON GENERATE. O registro especial JSON-CODE contém um código de exceção, conforme detalhado em exceções JSON GENERATE no Enterprise COBOL Programming Guide.
O escopo de uma instrução condicional JSON GENERATE ou JSON PARSE pode ser encerrado por:
END-JSON também pode ser usado com uma instrução JSON GENERATE ou JSON PARSE que não especifica a frase ON EXCEPTION ou NOT ON EXCEPTION.
Para obter mais informações sobre terminadores de escopo explícitos, consulte Delimited scope statements - Instruções de escopo delimitadas.