H DFTNAME(TESTJSON1) DATEDIT(*YMD/) BNDDIR('QC2LE') H CCSID(*GRAPH:*SRC) F********** JSON パーサーのテスト ************************************* F* F********************************************************************** * CRTBNDRPG OBJ(OBJLIB/TESTJSON1) SRCFILE(MYSRCLIB/QRPGLESRC) * DFTACTRP(*NO) ACTGRP(*NEW) DBGVIEW(*SOURCE) AUT(*ALL) *-------------------------------------------------------------------* * 2021/11/30 : 作成 *-------------------------------------------------------------------* **************************************************** * プロシージャーのプロトタイプ宣言 * **************************************************** D*( JSON2XML のプロトタイプ宣言 ) D JSON2XML PR 10I 0 D JSON_P * Vアツマオ D XML_P * Vアツマオ *( 作業変数 ) D TRUE# S 10I 0 INZ(0) D FALSE# S 10I 0 INZ(-1) D JSON S 512A D XML S 512A D UCS2 S 512C CCSID(1200) D RECORD DS QUALIFIED D SHCODE 1 10A D SHNAME 11 34A D SHTANK 35 41S 0 D SHSCOD 42 45A /FREE JSON = '{+ "SHCODE": "NV-CF1",+ "SHNAME": " Cカセット編集ビデオ ",+ "SHTANK":"58000",+ "SHSCOD":"0002"+ }'; JSON2XML(%ADDR(JSON): %ADDR(XML)); //JSON を XML に変換する UCS2 = %UCS2(XML); XML-INTO RECORD %XML(UCS2:'ウウヘケエ=マウヘ2 ウアヘオ=アトモ'); /END-FREE C SETON LR C RETURN ************************************************************ * JSON2XML : JSON を XML に変換する ************************************************************ *---( JSON2XML ここから )-----------------------* * JSON を XML に変換する P JSON2XML B D PI 10I 0 D JSON_P * Vアツマオ D XML_P * Vアツマオ * D JSON S 1A BASED(JSON_P) D DIM(512) D XML S 512A BASED(XML_P) D N S 4S 0 D LEN S 4S 0 D X S 4S 0 D FLD S 10A D VALUE S 256A D イFLD S N INZ(*OFF) D イVALUE S N INZ(*OFF) D イOE S N INZ(*OFF) D OE S 1A INZ(X'0E') D OF S 1A INZ(X'0F') /FREE X = 0; LEN = %ELEM(JSON); FOR N = 1 TO LEN; SELECT; WHEN JSON(N) = '{'; XML = ''; WHEN JSON(N) = '"'; IF イOE = *ON; VALUE = %TRIM(VALUE) + JSON(N); // 漢字中 ITER; ENDIF; IF イFLD = *OFF; IF %LEN(%TRIMR(FLD)) > 0; // フィールドの終わり イFLD = *ON; XML = %TRIMR(XML) + '<' + %TRIMR(FLD) + '>'; ENDIF; ELSE; IF イVALUE = *OFF; IF %LEN(%TRIMR(VALUE)) > 0; イVALUE = *ON; // 値の終わり XML = %TRIMR(XML) + %TRIMR(VALUE) + ''; ENDIF; ELSE; ENDIF; ENDIF; WHEN JSON(N) = ':'; IF イOE = *ON; VALUE = %TRIM(VALUE) + JSON(N); // 漢字中 ITER; ENDIF; WHEN JSON(N) = ','; IF イOE = *ON; VALUE = %TRIM(VALUE) + JSON(N); // 漢字中 ITER; ENDIF; イFLD = *OFF; イVALUE = *OFF; FLD = ' '; VALUE = ' '; WHEN JSON(N) = '}'; IF イOE = *OFF; XML = %TRIMR(XML) + ''; ELSE; VALUE = %TRIM(VALUE) + JSON(N); // 漢字中 ENDIF; OTHER; IF JSON(N) = OE; イOE = *ON; ELSE; IF JSON(N) = OF; イOE = *OFF; ENDIF; ENDIF; IF イFLD = *OFF; FLD = %TRIMR(FLD) + JSON(N); ELSE; VALUE = %TRIM(VALUE) + JSON(N); ENDIF; ENDSL; ENDFOR; /END-FREE C RETURN TRUE# P E *---( JSON2XML ここまで )----------------------*