ENTMF 

JSON GENERATE 文

JSON GENERATE 文はデータを JSON 形式に変換します。

一般形式

JSON GENERATE Statement

構文規則

  1. identifier-1 は、項類が英数字の基本データ項目、英数字の集団項目、項類が各国文字の基本データ項目、各国文字の集団項目のいずれかでなければなりません。
  2. identifier-1 が各国文字の集団項目である場合、identifier-1 は項類が各国文字の基本データ項目として処理されます。
  3. identifier-1 が英数字の集団項目である場合、identifier-1 は項類が英数字の基本データ項目であるかのように扱われます。
  4. identifier-1 を JUSTIFIED 句で定義してはなりません。
  5. identifier-1、identifier-2、identifier-4、identifier-5 はいずれも、関数一意名であってはなりません。
  6. identifier-1 は添え字付けすること、または部分参照することができます。
  7. identifier-1 は、identifier-2 または identifier-3 と重複してはいけません。
  8. identifier-1 の項類が各国文字の場合、生成される JSON テキストは UTF-16 ビッグエンディアン (コードページ 1200) でエンコードされます。それ以外の場合は、UTF-8 (コードページ 1208) でエンコードされます。
  9. identifier-1 は、生成される JSON テキストを格納できる大きさでなくてはなりません。一般的には、identifier-2 内のデータ名の長さに応じて、identifier-2 のサイズの 2 から 3 倍である必要があります。identifier-1 のサイズが不足している場合、JSON GENERATE 文の終了時に例外条件が発生します。COUNT 指定が記述されている場合、identifier-3 には、実際に生成された文字符号化単位の数が格納されます。
  10. SUPPRESS 指定が有効な場合も、identifier-1 は、抑制前に生成された JSON テキストを格納できる大きさでなければなりません。
  11. identifier-2 は部分参照することはできませんが、添え字付けすることはできます。
  12. identifier-2 は、identifier-1 または identifier-3 と重複してはならず、RENAMES 句を指定してもいけません。
  13. identifier-2 は、次のいずれかに設定されている場合、JSON GENERATE 文で無視されます。名前のない下位の基本データ項目または基本 FILLER データ項目、SYNCHRONIZED 項目に挿入される遊びバイト、REDEFINES 句で定義された (またはそのような再定義項目に従属する) identifier-2 に従属するデータ項目、RENAMES 句で定義された identifier-2 に従属するデータ項目、および下位データ項目がすべて無視される集団データ項目のいずれかに設定されている場合です。
  14. 前の規則に従って無視されない identifier-2 で指定されたすべてのデータ項目は、次の条件を満たす必要があります。各基本データ項目には、POINTER、FUNCTION-POINTER、PROCEDURE-POINTER、または OBJECT REFERENCE 以外の USAGE が必要です。そのような基本データ項目が少なくとも 1 つ存在しなければなりません。FILLER 以外の各データ名は隣接した上位の集団データ項目内で一意にしてください。
  15. identifier-3 は、そのピクチャ文字列に記号 P なしに定義される、整数データ項目でなければなりません。
  16. identifier-3 は、identifier-1、identifier-2、identifier-4、または identifier-5 と重複してはいけません。
  17. identifier-4 は、identifier-2 またはその下位データ項目の 1 つを参照しなければなりません。
  18. identifier-4 または identifier-5 は、部分参照すること、または添え字付けすることはできません。
  19. identifier-4 は、JSON GENERATE 文で無視されるデータ項目を指定することはできません。
  20. literal-1 は、identifier-4 に対応する JSON テキストで生成される名前を含む英数字または各国文字のリテラルでなければなりません。
  21. identifier-5 は、identifier-2 に従属する、またそれ以外の場合は JSON GENERATE 文の操作で無視されないデータ項目を参照する必要があります。

一般規則

  1. identifier-1 は、生成された JSON テキストの受け取り側領域です。
  2. identifier-2 は、JSON 形式に変換される集団または基本データ項目です。
  3. COUNT 指定を記述した場合、生成された JSON 文字符号化単位のカウントが (JSON GENERATE 文の正常な実行後に) identifier-3 に格納されます。identifier-1 (受け取り側) の項類が各国文字である場合、カウントは 2 バイト単位になります。それ以外の場合、カウントはバイト単位です。
  4. NAME 指定を使用すると、identifier-2 またはその下位データ項目から派生したデフォルトの JSON 名をオーバーライドできます。
  5. NAME 指定で identifier-4 を複数回指定している場合は、最後の指定が使用されます。
  6. SUPPRESS 指定を使用すると、identifier-2 に従属する項目を識別して無条件に除外できるため、JSON GENERATE 文の出力を選択的に生成できます。
  7. identifier-5 で集団データ項目を指定している場合、その集団データ項目およびすべての下位データ項目が除外されます。
  8. identifier-5 の重複した指定は許可されます。
  9. SUPPRESS 指定が記述されている場合、identifier-2 に従属する集団項目は、その集団項目に従属するすべての適格な項目が除外されるとき、生成される JSON テキストから除外されます。identifier-2 に対するすべての下位項目が除外される場合でも、identifier-2 自体に対応する一番外側のオブジェクトは常に生成されます。この場合、identifier-2 に対して生成される値は、次のように空のオブジェクトになります。
    {“identifier-2”:{}}

    明示的に抑制しない限り、次のように、要素のない ODO テーブルが常に JSON テキストに保持されます。

    {“table-name”:[]}
  10. ON EXCEPTION 指定が記述されている場合、JSON ドキュメントの生成中にエラーが発生すると、制御は imperative-statement-1 に移ります。
  11. ON EXCEPTION 指定が記述されていない場合、NOT ON EXCEPTION 指定は記述されていても無視され、エラー発生時には JSON GENERATE 文の最後に制御が移されます。
  12. エラーが発生した場合、JSON-CODE 特殊レジスタには例外コードが格納されます。詳細については、「JSON-CODE 例外コード」を参照してください。
  13. JSON ドキュメントの生成中に例外条件が発生しなければ、制御は imperative-statement-2 に渡されます (指定されている場合)。指定されていない場合、制御は JSON GENERATE 文の最後に渡されます。ON EXCEPTION 指定は記述されていても無視され、特殊レジスタ JSON-CODE には JSON GENERATE 文の実行後にゼロが格納されます。
  14. END-JSON 指定は、文の範囲を区切る範囲符です。
  15. END-JSON を使用すると、条件付きの JSON GENERATE 文 (つまり、ON EXCEPTION または NOT ON EXCEPTION 指定を記述する JSON GENERATE 文) を、別の条件文に入れ子にすることができます。
  16. 条件付き JSON GENERATE 文の範囲は、END-JSON 指定または分離符の終止符で終了できます。
  17. また、END-JSON は、ON EXCEPTION または NOT ON EXCEPTION 指定を記述しない JSON GENERATE 文とともに使用することもできます。
  18. 別の JSON GENERATE 文の imperative-statement-1 または imperative-statement-2 に出現する JSON GENERATE 文は、入れ子の JSON GENERATE 文です。入れ子の JSON GENERATE 文は、左から右に向かって、対応する JSON GENERATE と END-JSON が組になったものと見なされます。したがって、出現する END-JSON 指定は、明示的にも暗示的にも終了していない、最も近い先行の JSON GENERATE 文と組み合わされます。