Appendix A: The JSON GENERATE program

The following program is used in Tutorial: Generating JSON output.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. JSONGENR8.

       SPECIAL-NAMES.
       CURRENCY SIGN IS '€' WITH PICTURE SYMBOL 'Q'.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT JSON-FILE ASSIGN 
            "JSONout.DAT"
               ORGANIZATION IS SEQUENTIAL.

       DATA DIVISION.
       FILE SECTION.
       FD  JSON-FILE.
       01  JSON-RECORD.
           03  JSON-TEXT-STRING                       PIC X(650).

       WORKING-STORAGE SECTION.
       01  COBOL-STRUCTURE.
           03  firstName                              PIC X(50). 
           03  lastName                               PIC X(50). 
           03  age                                    PIC 9(04).
           03  postalAddress.
               05  street                             PIC X(50).
               05  town                               PIC X(50).
               05  county                             PIC X(50).
           03  phoneNumber
               occurs 1 to 5 times depending on num-of-phones.
               05  typ                                PIC X(06).
               05  num                                PIC 9(09).
           03  _reference                             PIC X(12).
           03  children.
               05  child                              PIC X(50)
               occurs 1 to 5 times depending on num-of-children.
           03  pets                                   PIC X(10)
               occurs 1 to 5 times depending on num-of-pets.
           03  salary                                 PIC Q99,999.

       01  num-of-phones                              PIC 9(04) comp-5
                                                       value 0.
       01  num-of-children                            PIC 9(04) comp-5
                                                       value 0.         
       01  num-of-pets                                PIC 9(04) comp-5
                                                       value 0.

       01  json-doc                                   pic X(650).
       01  c1                                         pic 9(04) comp-5.

       PROCEDURE DIVISION.
       MAIN SECTION.

           OPEN OUTPUT JSON-FILE

           PERFORM P000-POPULATE-STRUCTURE

           PERFORM J100-SIMPLE-GENERATE
      *    PERFORM J200-GENERATE-EXCEPTION
      *    PERFORM J300-COMPLEX-GENERATE

           CLOSE JSON-FILE

           GOBACK
           .

       P000-POPULATE-STRUCTURE SECTION.
       P100-MOVE-DATA.
           *> POPULATE THE COBOL DATA STRUCTURE
           MOVE 'Justin' TO FIRSTNAME
           MOVE 'Case'   TO LASTNAME
           MOVE 24        TO AGE

           MOVE '221B Baker Street' TO STREET
           MOVE 'Westminster'       TO TOWN
           MOVE 'London'            TO COUNTY

           MOVE 2              TO NUM-OF-PHONES
           MOVE 'Work'         TO TYP(1)
           MOVE 99972301212    TO NUM(1)
           MOVE 'Home'         TO TYP(2)
           MOVE 99972243688    TO NUM(2)

           MOVE 'NS9999'       TO _reference
           MOVE 0              TO NUM-OF-CHILDREN
           MOVE 3              TO NUM-OF-PETS
           MOVE 'Cat'          TO PETS(1)
           MOVE 'Dog'          TO PETS(2)
           MOVE 'Canary'       TO PETS(3)
           MOVE 40000          TO SALARY
           .
       P999-EXIT.
           EXIT
           .

       J000-JSON-GENERATE SECTION.

       J100-SIMPLE-GENERATE.
           *> SIMPLIFIED GENERATE THE JSON TEXT STRUCTURE
           JSON GENERATE JSON-DOC FROM COBOL-STRUCTURE
               COUNT IN C1

           IF JSON-CODE = ZEROES
               MOVE JSON-DOC(1:C1) TO JSON-TEXT-STRING
               WRITE JSON-RECORD
           ELSE
               EXHIBIT NAMED JSON-CODE
               EXHIBIT NAMED JSON-STATUS
           END-IF
           GO TO J999-EXIT
           .

       J200-GENERATE-EXCEPTION.
           *> SIMPLE GENERATE WITH ON EXCEPTION
           JSON GENERATE JSON-DOC FROM COBOL-STRUCTURE 
               COUNT IN C1
               ON EXCEPTION
                   EXHIBIT NAMED JSON-CODE
                   EXHIBIT NAMED JSON-STATUS
                   GO TO J999-EXIT
           END-JSON

           MOVE JSON-DOC(1:C1) TO JSON-TEXT-STRING
           WRITE JSON-RECORD
           GO TO J999-EXIT
           .
       J300-COMPLEX-GENERATE.
           *> COMPLEX GENERATE EXAMPLE
           JSON GENERATE JSON-DOC FROM COBOL-STRUCTURE
               COUNT IN C1
               NAME OF _reference OF COBOL-STRUCTURE IS 'reference'   
               SUPPRESS salary OF COBOL-STRUCTURE
                        typ    OF COBOL-STRUCTURE            
               ON EXCEPTION
                   EXHIBIT NAMED JSON-CODE
                   EXHIBIT NAMED JSON-STATUS
                   GO TO J999-EXIT
           END-JSON

           MOVE JSON-DOC(1:C1) TO JSON-TEXT-STRING
           WRITE JSON-RECORD
           GO TO J999-EXIT
           .
       J999-EXIT.
           EXIT
           .