JSON GENERATE 文はデータを JSON 形式に変換する。
一般形式
when-phrase
generic-suppression-phrase
phrase-1
構文規則
- identifier-1 は、項類が英数字の基本データ項目、英数字の集団項目、項類が各国文字の基本データ項目、各国文字の集団項目のいずれかとする。
- identifier-1 が各国文字の集団項目である場合、identifier-1 は項類が各国文字の基本データ項目として処理される。
- identifier-1 が英数字の集団項目である場合、identifier-1 は項類が英数字の基本データ項目であるかのように扱われる。
- identifier-1 を JUSTIFIED 句で定義してはならない。
- identifier-1、identifier-2、identifier-4、identifier-5 はいずれも、関数一意名であってはならない。
- identifier-1 は添え字付けまたは部分参照が可能である。
- identifier-1 は、identifier-2 または identifier-3 と重複してはならない。
- identifier-1 を動的長集団項目または動的長基本項目にすることはできない。
- identifier-1 の項類が各国文字の場合、生成される JSON テキストは UTF-16 ビッグエンディアン (コードページ 1200) でエンコードされる。それ以外の場合は、UTF-8 (コードページ 1208) でエンコードされる。
- identifier-1 は、生成される JSON テキストを格納できる大きさでなくてはならない。一般的には、identifier-2 内のデータ名の長さに応じて、identifier-2 のサイズの 2 から 3 倍である必要がある。identifier-1
のサイズが不足している場合、JSON GENERATE 文の終了時に例外条件が発生する。COUNT 指定が記述されている場合、identifier-3 には、実際に生成された文字符号化単位の数が格納される。
- SUPPRESS 指定が有効な場合も、identifier-1 は、抑制前に生成された JSON テキストを格納できる大きさでなければならない。
- identifier-2 は部分参照することはできないが、添え字付けすることはできる。
- identifier-2 を動的長集団項目または動的長基本項目にすることはできない。
- identifier-2 は、identifier-1 または identifier-3 と重複してはならず、RENAMES 句を指定してもいけない。
- identifier-2 は、次のいずれかに設定されている場合、JSON GENERATE 文で無視される。名前のない下位の基本データ項目または基本 FILLER データ項目、SYNCHRONIZED 項目に挿入される遊びバイト、REDEFINES
句で定義された (またはそのような再定義項目に従属する) identifier-2 に従属するデータ項目、RENAMES 句で定義された identifier-2 に従属するデータ項目、および下位データ項目がすべて無視される集団データ項目のいずれかに設定されている場合。
- 前の規則に従って無視されない identifier-2 で指定されたすべてのデータ項目は、次の条件を満たす必要がある。各基本データ項目には、POINTER、FUNCTION-POINTER、PROCEDURE-POINTER、または OBJECT
REFERENCE 以外の USAGE が必要である。そのような基本データ項目が少なくとも 1 つ存在しなければならない。FILLER 以外の各データ名は隣接した上位の集団データ項目内で一意にしなければならない。
- identifier-3 は、そのピクチャ文字列で記号 P なしで定義される整数データ項目とする。
- identifier-3 は、identifier-1、identifier-2、identifier-4、または identifier-5 と重複してはいけない。
- identifier-4 は、identifier-2 またはその下位データ項目の 1 つを参照しなければならない。
- identifier-4 または identifier-5 は、部分参照すること、添え字付けすること、または関数一意名にすることはできない。
- identifier-4 は、JSON GENERATE 文で無視されるデータ項目を指定することはできない。
- literal-1 は、identifier-4 に対応する JSON テキストで生成される名前を含む英数字定数または各国文字定数でなければならない。または、OMITTED を指定して、最上位の親名が生成されない匿名の JSON オブジェクトを生成することもできる。OMITTED
を指定する場合、identifier-4 は identifier-2 を参照する必要がある。
- identifier-5 は、identifier-2 に従属する、またそれ以外の場合は JSON GENERATE 文の操作で無視されないデータ項目を参照する必要がある。
- identifier-6 は、データ定義項に PICTURE X を含む 1 バイトの英数字の基本データ項目とする。
- condition-name-1 は、identifier-6 に直接従属するレベル 88 の項目でなければならず、複数の値または値の範囲を指定できる。
- literal-2 は、1 バイトの英数字定数とする。
一般規則
- identifier-1 は、生成された JSON テキストの受け取り側領域である。
- identifier-2 は、JSON 形式に変換される集団項目または基本データ項目である。
- COUNT 指定を記述した場合、生成された JSON 文字符号化単位のカウントが (JSON GENERATE 文の正常な実行後に) identifier-3 に格納される。identifier-1 (受け取り側) の項類が各国文字である場合、カウントは
2 バイト単位になる。それ以外の場合、カウントはバイト単位である。
- NAME 指定を使用すると、identifier-2 またはその下位データ項目から派生したデフォルトの JSON 名をオーバーライドできる。
- NAME 指定で identifier-4 を複数回指定している場合は、最後の指定が使用される。
- SUPPRESS 指定を使用すると、identifier-2 に従属する項目を識別して条件的に除外できるため、JSON GENERATE 文の出力を選択的に生成できる。
- SUPPRESS 指定が記述されている場合、identifier-2 に従属する集団項目は、その集団項目に従属するすべての適格な項目が除外される際、生成される JSON テキストから除外される。identifier-2 に対するすべての下位項目が除外される場合でも、identifier-2
自体に対応する一番外側のオブジェクトは常に生成される。この場合、identifier-2 に対して生成される値は、次のように空のオブジェクトになる。
{“identifier-2”:{}}
明示的に抑制しない限り、次のように、要素のない ODO テーブルが常に JSON テキストに保持される。
{“table-name”:[]}
- identifier-5 は、抑制される可能性に備えて項目を明示的に示す。identifier-2 に従属する、またそれ以外の場合は JSON GENERATE 操作で無視されないデータ項目を参照する必要がある。
- WHEN 指定 (when-phrase) を記述する場合、identifier-5 は基本データ項目を参照する必要があるが、WHEN 指定を省略する場合は、identifier-5 を集団項目にすることができる。集団データ項目が指定されている場合、その集団データ項目およびすべての下位データ項目が除外される。
- identifier-5 の重複した指定は許可される。
- identifier-5 を使用する場合の抑制される可能性の規則は次のとおり。
- WHEN ZERO/ZEROES/ZEROS を指定する場合、identifier-5 の用途を DISPLAY-1 にすることはできない。
- WHEN SPACE/SPACES を指定する場合、identifier-5 の用途は DISPLAY、DISPLAY-1、または NATIONAL とする。ゾーン 10 進項目または各国文字 10 進項目である場合は、整数とする。
- WHEN LOW-VALUE/LOW-VALUES/HIGH-VALUE/HIGH-VALUES を指定する場合、identifier-5 の用途は DISPLAY または NATIONAL とする。ゾーン 10 進項目または各国文字 10 進項目である場合は、整数とする。
- generic-suppression-phrase (汎用抑制指定) は、identifier-2 に属する、またそれ以外の場合は JSON GENERATE 操作で無視されない基本項目を、抑制される可能性に備えて識別する。これらの項目は、NUMERIC
および NONUMERIC キーワードに従って識別される。両方のキーワードを省略すると、両方の型が識別される。
- generic-suppression-phrase を複数指定した場合、効果は累積される。
- generic-suppression-phrase を使用する場合の抑制される可能性の規則は次のとおり。
- WHEN 指定で ZERO、ZEROES、または ZEROS を記述すると、USAGE DISPLAY-1 で定義されたデータ項目以外のすべての項目が選択される。
- WHEN 指定で SPACE または SPACES を記述すると、USAGE DISPLAY、DISPLAY-1、または NATIONAL のデータ項目が選択される。ゾーン 10 進項目または各国文字 10 進項目では、整数のみが選択される。
- WHEN 指定で LOW-VALUE、LOW-VALUES、HIGH-VALUE、または HIGH-VALUES を記述すると、USAGE DISPLAY または NATIONAL のデータ項目が選択される。ゾーン 10 進項目または各国文字
10 進項目では、整数のみが選択される。
- 抑制される可能性がある項目の判別時、項目の字類が数字であり、WHEN ZERO/ZEROES/ZEROS が指定されている場合、数字の比較が実行される。他のすべての項目については、項目の用途が DISPLAY、DISPLAY-1、NATIONAL
のいずれであるかに応じて、比較は英数字、DBCS、または各国文字になる。
- CONVERTING 指定を使用すると、JSON BOOLEAN の名前と値のペアとして生成される項目を指定できる。condition-name-1 および literal-2 の指定は、生成される JSON BOOLEAN の true 値を表すが、その他の値はすべて
JSON BOOLEAN の false として生成される。ALSO キーワードを使用して、JSON BOOLEAN の名前と値のペアを複数指定できる。
- ON EXCEPTION 指定が記述されている場合、JSON ドキュメントの生成中にエラーが発生すると、制御は imperative-statement-1 に移る。
- ON EXCEPTION 指定が記述されていない場合、NOT ON EXCEPTION 指定は記述されていても無視され、エラー発生時には JSON GENERATE 文の最後に制御が移される。
- エラーが発生した場合、JSON-CODE 特殊レジスタには例外コードが格納される。詳細については、「JSON-CODE 例外コード」を参照。
- JSON ドキュメントの生成中に例外条件が発生しなければ、制御は imperative-statement-2 に渡される (指定されている場合)。指定されていない場合、制御は JSON GENERATE 文の最後に渡される。ON EXCEPTION
指定は記述されていても無視され、特殊レジスタ JSON-CODE には JSON GENERATE 文の実行後にゼロが格納される。
- END-JSON 指定は、文の範囲を区切る範囲符である。
- END-JSON を使用すると、条件付きの JSON GENERATE 文 (つまり、ON EXCEPTION または NOT ON EXCEPTION 指定を記述する JSON GENERATE 文) を、別の条件文に入れ子にすることができる。
- 条件付き JSON GENERATE 文の範囲は、END-JSON 指定または分離符の終止符で終了できる。
- また、END-JSON は、ON EXCEPTION または NOT ON EXCEPTION 指定を記述しない JSON GENERATE 文とともに使用することもできる。
- 別の JSON GENERATE 文の imperative-statement-1 または imperative-statement-2 に出現する JSON GENERATE 文は、入れ子の JSON GENERATE 文である。入れ子の
JSON GENERATE 文は、左から右に向かって、対応する JSON GENERATE と END-JSON が組になったものと見なされる。したがって、出現する END-JSON 指定は、明示的にも暗示的にも終了していない、最も近い先行の
JSON GENERATE 文と組み合わされる。