【COBOL学習|実務向け】JSON GENERATEのSUPPRESS句で実現する「不要なキーの削除」とAPI連携の最適化

導入:なぜJSON生成でSUPPRESSが必要なのか

現代のCOBOLシステムにおいて、外部APIとのJSON連携は避けて通れない業務となりました。しかし、COBOLの固定長構造をそのままJSON化すると、初期値(空白やゼロ)まで全て出力されてしまい、受信側APIが「未設定」と「値0」を区別できずにエラーになるケースが多発します。この課題を解決するのが、COBOL 2002以降で導入されたSUPPRESS句です。これを使うことで、不要なキーを動的に除外し、ネットワーク負荷の削減とAPIの互換性向上を同時に実現できます。

基礎知識:SUPPRESS句の役割

JSON GENERATE文は、COBOLのデータ構造をJSON形式に変換する強力な命令です。通常、数値項目の初期値は「0」、英数字項目は「スペース」で埋められますが、これをそのままJSONに出力すると「{“amount”: 0}」のように不要なデータが混入します。SUPPRESS句は、特定の条件(数値のゼロや空白など)に合致する項目をJSON生成対象から「除外」する指示子です。

実装:SUPPRESS句の書き方

SUPPRESS句はJSON GENERATE文の末尾に記述します。代表的な指定は以下の通りです。

SUPPRESS EVERY NUMERIC ZERO:数値が0の項目を出力しない。
SUPPRESS EVERY SPACE:空白のみの項目を出力しない。
SUPPRESS EVERY ZERO LENGTH:可変長項目などの長さが0の項目を出力しない。

これらを組み合わせることで、必要なデータのみをスリムに送信することが可能になります。

サンプルプログラム

以下のコードは、数値が0の項目をJSONから完全に除外する例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. JSON-SUPPRESS-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 USER-DATA.
05 USER-ID PIC X(5) VALUE “A001”.
05 AMOUNT PIC 9(5) VALUE 0. > この0はJSONに出力させない
05 NOTE PIC X(10) VALUE “MEMO”.

01 JSON-OUTPUT PIC X(100).
01 JSON-LENGTH PIC 9(4).

PROCEDURE DIVISION.
> SUPPRESS句を使用して、数値の0をJSONから除外する
JSON GENERATE JSON-OUTPUT FROM USER-DATA
SUPPRESS EVERY NUMERIC ZERO
COUNT IN JSON-LENGTH
END-JSON.

> 結果表示: {“USER-ID”:”A001″,”NOTE”:”MEMO”}
> AMOUNTキーごと消滅していることを確認
DISPLAY “JSON: ” JSON-OUTPUT(1:JSON-LENGTH).

STOP RUN.

応用と注意点:現場での陥りやすい罠

現場で活用する際、以下の点に注意してください。

1. 必須項目の除外に注意
SUPPRESS句は指定した条件に合う全ての項目に適用されます。API側が「値が0であってもキーは必須」としている場合、SUPPRESSを使うとAPIエラーになります。除外してよい項目と、必ず送るべき項目を事前に明確に分けておきましょう。

2. グループ項目の扱い
グループ項目全体が初期値である場合、そのグループごと除外されることがあります。複雑な階層構造を持つデータの場合、意図しないキーの欠落が発生していないか、生成後のJSON文字列を一度デバッグ出力して確認する工程を必ず設けてください。

3. パフォーマンスへの影響
大規模な構造体をJSON化する場合、SUPPRESSによる条件判定がわずかながらCPU負荷になります。極端に巨大な配列を扱う際は、ループ回数と処理時間を実測することをお勧めします。

この機能を使いこなせれば、モダンなWeb APIとも柔軟に連携できる堅牢なCOBOLプログラムが構築可能です。ぜひ活用してください。

コメント

タイトルとURLをコピーしました