Open
Description
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.