Skip to content

JSON support #41

Open
Open
@n-isaka

Description

@n-isaka

I tried to implement the JSON function.
This function like a environment function with jansson.

DISPLAY JSON-NAME : Specify the name of JSON structure.
DISPLAY JSON-KEY : Register period separated key names.
ACCEPT JSON-VALUE: Gets the value specified by JSON-KEY from JSON-NAME data.

Look at this branch: feature/JSON_support

COBOL sample:

      ******************************************************************
      *  opensource COBOL JSON support
      ******************************************************************
       IDENTIFICATION              DIVISION.
      ******************************************************************
       PROGRAM-ID.                 JSON.
       AUTHOR.                     n-isaka.
       DATE-WRITTEN.               2019-06-13.
      ******************************************************************
       ENVIRONMENT                 DIVISION.
      ******************************************************************
       CONFIGURATION               SECTION.
       SPECIAL-NAMES.
      ******************************************************************
       INPUT-OUTPUT                SECTION.
       FILE-CONTROL.
      ******************************************************************
       DATA                        DIVISION.
      ******************************************************************
       FILE                        SECTION.
      ******************************************************************
       WORKING-STORAGE             SECTION.
       01  JSON-STR                PIC  X(255).
       01  J-KEY                   PIC  X(255).
       01  J-VALUE                 PIC  X(255).
      ******************************************************************
       PROCEDURE                   DIVISION.
      ******************************************************************
       MAIN-RTN.

      *    *** 1つ目のJSONを登録
           STRING '{'                             DELIMITED BY SIZE
                     '"key1" : "value1",'         DELIMITED BY SIZE
                     '"key2" : 2,'                DELIMITED BY SIZE
                     '"key3" : {'                 DELIMITED BY SIZE
                        '"key3-1" : "value3-1",'  DELIMITED BY SIZE
                        '"key3-2" : "value3-2"'   DELIMITED BY SIZE
                     '},'                         DELIMITED BY SIZE
                     '"key4" : ['                 DELIMITED BY SIZE
                        '"value4-1",'             DELIMITED BY SIZE
                        '"value4-2",'             DELIMITED BY SIZE
                        '"value4-3"'              DELIMITED BY SIZE
                     ']'                          DELIMITED BY SIZE
                  '}'                             DELIMITED BY SIZE
                  INTO JSON-STR.

           DISPLAY "JSON"          UPON JSON-NAME.
           DISPLAY JSON-STR        UPON JSON-VALUE.

      *    *** 2つ目のJSONを登録
           MOVE SPACE              TO JSON-STR.
           STRING '{'                             DELIMITED BY SIZE
                     '"key10" : "value10"'        DELIMITED BY SIZE
                  '}'                             DELIMITED BY SIZE
                  INTO JSON-STR.

           DISPLAY "JSON2"         UPON JSON-NAME.
           DISPLAY JSON-STR        UPON JSON-VALUE.

      *    *** 1つ目のJSONを選択
           DISPLAY "JSON"          UPON JSON-NAME.

      *    *** 1つ目のJSONからKEYでデータを取得
      *    *** 配列は対応
           MOVE "key4[1]"          TO J-KEY.
           MOVE SPACE              TO J-VALUE.
           DISPLAY J-KEY           UPON JSON-KEY.
           ACCEPT  J-VALUE         FROM JSON-VALUE.
           DISPLAY J-KEY ":" J-VALUE.
      *    key4[1] : value4-2

      *    *** 数値型も対応
           MOVE "key2"             TO J-KEY.
           MOVE SPACE              TO J-VALUE.
           DISPLAY J-KEY           UPON JSON-KEY.
           ACCEPT  J-VALUE         FROM JSON-VALUE.
           DISPLAY J-KEY ":" J-VALUE.
      *    key2 : 2

      *    *** 入れ子も対応
           MOVE "key3.key3-2"      TO J-KEY.
           MOVE SPACE              TO J-VALUE.
           DISPLAY J-KEY           UPON JSON-KEY.
           ACCEPT  J-VALUE         FROM JSON-VALUE.
           DISPLAY J-KEY ":" J-VALUE.
      *    key3.key3-2 : value3-2

      *    *** 2つ目のJSONを選択
           DISPLAY "JSON2"         UPON JSON-NAME.

      *    *** 2つ目のJSONから値を取得
           MOVE "key10"            TO J-KEY.
           MOVE SPACE              TO J-VALUE.
           DISPLAY J-KEY           UPON JSON-KEY.
           ACCEPT  J-VALUE         FROM JSON-VALUE.
           DISPLAY J-KEY ":" J-VALUE.
      *    key10 : value10

      *    *** この時1個目のJSONからは値がとれない
           MOVE "key3.key3-2"      TO J-KEY.
           MOVE SPACE              TO J-VALUE.
           DISPLAY J-KEY           UPON JSON-KEY.
           ACCEPT  J-VALUE         FROM JSON-VALUE.
           DISPLAY J-KEY ":" J-VALUE.
      *    key3.key3-2 : 

       MAIN-EXT.
           STOP RUN.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions