プライマリ・コンテンツに移動
Oracle® Application Express APIリファレンス
リリース5.0
E67397-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

15 APEX_JSON

このパッケージには、JSONを解析および生成するユーティリティが格納されています。

パッケージの概要および例

JSONデータを含む文字列から読み取るには、まずparse()を使用してその文字列を内部形式に変換します。次に、get_%ルーチン(get_varchar2()get_number()など)を使用して検索するデータおよびfind_paths_like()にアクセスします。

あるいは、to_xmltype()を使用してJSON文字列をXMLTypeに変換します。

このパッケージには、JSON形式の出力を生成するプロシージャも格納されています。オーバーロードされたopen_%()close_%()およびwrite()の各プロシージャを書込みに使用します。

例1

この例では、JSON文字列を解析し、メンバー変数"a"の値を出力します。

DECLARE
    s varchar2(32767) := '{ "a": 1, "b": ["hello", "world"]}';
BEGIN
    apex_json.parse(s);
    sys.dbms_output.put_line('a is '||apex_json.get_varchar2(p_path => 'a'));
END;

例2

この例では、JSON文字列をXMLに変換し、XMLTABLEを使用してメンバー値を問い合せます。

select col1, col2
from xmltable (
        '/json/row'
        passing apex_json.to_xmltype('[{"col1": 1, "col2": "hello"},'||
                '{"col1": 2, "col2": "world"}]')
        columns
           col1 number path '/row/col1',
           col2 varchar2(5) path '/row/col2' );

例3

この例では、ネストされたJSONオブジェクトをHTPバッファに書き込みます。

BEGIN
    apex_json.open_object;        -- {
    apex_json.write('a', 1);    --   "a":1
    apex_json.open_array('b');  --  ,"b":[
    apex_json.open_object;    --    {
    apex_json.write('c',2); --      "c":2
    apex_json.close_object;   --    }
    apex_json.write('hello'); --   ,"hello"
    apex_json.write('world'); --   ,"world"
    apex_json.close_all;          --  ]
                          -- }
END;

定数およびデータ型

パーサー・インタフェース

パーサー・インタフェースに使用される定数は次のとおりです。

subtype t_kind is binary_integer range 1 .. 7;
c_null     constant t_kind := 1;
c_true     constant t_kind := 2;
c_false    constant t_kind := 3;
c_number   constant t_kind := 4;
c_varchar2 constant t_kind := 5;
c_object   constant t_kind := 6;
c_array    constant t_kind := 7;

JSONデータ用のストレージ

JSONデータは、varchar2別索引の表に格納されます。JSON値はレコードとして格納されます。弁別子"kind"により、値がnull、true、false、数値、varchar2、オブジェクト、配列のいずれであるか決まります。使用されるレコード・フィールドとその方法は"kind"によって異なります。次に明記されていない場合は、他のレコード・フィールドの値が定義されていません。

* c_null: -

* c_true: -

* c_false: -

* c_number: number_valueに数値が格納されています

* c_varchar2: varchar2_valueにvarchar2値が格納されています

* c_object: object_membersにオブジェクトのメンバーの名前が格納されています

* c_array: number_valueに配列の長さが格納されています

type t_value is record (
   kind           t_kind,
   number_value   number,
   varchar2_value varchar2(32767),
   object_members wwv_flow_t_varchar2 );
type t_values is table of t_value index by varchar2(32767);

日付のデフォルト書式

c_date_iso8601 constant varchar2(30) := 'yyyy-mm-dd"T"hh24:mi:ss"Z"';

デフォルトのJSON値の表

g_values t_values;

PARSE()のスローされるエラー

e_parse_error     exception;
pragma exception_init(e_parse_error, -20987);

CLOSE_ALLプロシージャ

このプロシージャは、最も外側のネスト・レベルまでオブジェクトおよび配列をすべて閉じます。

構文

APEX_JSON.CLOSE_ALL;

パラメータ

なし。

「パッケージの概要および例」を参照してください。

CLOSE_ARRAYプロシージャ

このプロシージャは、次のような右大カッコを書き込みます。

]

構文

APEX_JSON.CLOSE_ARRAY ();

パラメータ

なし。

「パッケージの概要および例」を参照してください。

CLOSE_OBJECTプロシージャ

このプロシージャは、次のような右中カッコを書き込みます。

}

構文

APEX_JSON.CLOSE_OBJECT ();

パラメータ

なし。

「パッケージの概要および例」を参照してください。

DOES_EXISTファンクション

このファンクションは、指定されたパスが既存の値を指しているかどうかを判別します。

構文

APEX_JSON.DOES_EXIST (
   p_path             IN VARCHAR2,
   p0                 IN VARCHAR2 DEFAULT NULL,
   p1                 IN VARCHAR2 DEFAULT NULL,
   p2                 IN VARCHAR2 DEFAULT NULL,
   p3                 IN VARCHAR2 DEFAULT NULL,
   p4                 IN VARCHAR2 DEFAULT NULL,
   p_values           IN t_values DEFAULT g_values ) 
RETURN BOOLEAN;

パラメータ

表15-1 DOES_EXISTファンクションのパラメータ

パラメータ 説明

p_path

p_valuesへの索引。

p[0-4]

p_pathの各%NをpNで置き換え、i-th %sまたは%dをすべてp[i-1]で置き換えます。

p_values

解析されたJSONメンバー。デフォルトは、g_valuesです。


戻り値

表15-2 DOES_EXISTファンクションの戻り値

戻り値 説明

TRUE

指定されたパスは既存の値を指しています。

FALSE

指定されたパスは既存の値を指していません


この例では、JSON文字列を解析し、パス下の値が含まれているかどうかを出力します。

DECLARE 
    j apex_json.t_values; 
BEGIN 
    apex_json.parse(j, '{ "items": [ 1, 2, { "foo": true } ] }'); 
    if apex_json.does_exist(p_path => 'items[%d].foo', p0 => 3, p_values => 
j) then 
        dbms_output.put_line('found items[3].foo'); 
    end if; 
END;

FIND_PATHS_LIKEファンクション

このファンクションは、指定されたパターンに一致するp_valuesへのパスを戻します。

構文

APEX_JSON.FIND_PATHS_LIKE (
    p_return_path      IN VARCHAR2,
    p_subpath          IN VARCHAR2 DEFAULT NULL,
    p_value            IN VARCHAR2 DEFAULT NULL,
    p_values           IN t_values DEFAULT g_values )
RETURN wwv_flow_t_varchar2;

パラメータ

表15-3 FIND_PATHS_LIKEファンクションのパラメータ

パラメータ 説明

p_return_path

戻りパスの検索パターン。

p_subpath

p_return_path下の検索パターン(オプション)。

p_value

値の検索パターン(オプション)。

p_values

解析されたJSONメンバー。デフォルトは、g_valuesです。


戻り値/発生するエラー

表15-4 FIND_PATHS_LIKEファンクションの戻り値および発生するエラー

戻り値 説明

apex_t_varchar2

パターンに一致するパスの表。

VALUE_ERROR

p_values(p_path)が配列またはオブジェクトではない場合、このエラーが発生します。


この例では、JSON文字列を解析し、パターンに一致するパスを検索し、パス下の値を出力します。

DECLARE
    j            apex_json.t_values;
    l_paths apex_t_varchar2;
BEGIN
    apex_json.parse(j, '{ "items": [ { "name": "Amulet of Yendor", "magical": true }, '||
                                     { "name": "Slippers",  "magical": "rather not" } ]}');
    l_paths := apex_json.find_paths_like (
        p_values         => j,
        p_return_path => 'items[%]',
        p_subpath       => '.magical',
        p_value           => 'true' );
    dbms_output.put_line('Magical items:');
    for i in 1 .. l_paths.count loop
        dbms_output.put_line(apex_json.get_varchar2(p_values => j, p_path => l_paths(i)||'.name')); 
    end loop;
END;

FREE_OUTPUTプロシージャ

出力リソースを解放します。INITIALIZE_CLOB_OUTPUTを使用して一時CLOBに書き込んでいる場合、プロセス後にこのプロシージャをコールします。

構文

free_output;

この例では、CLOB出力用にAPEX_JSONを構成してJSONを生成し、DBMS_OUTPUTを使用してCLOBを出力し、最後にCLOBを解放します。

BEGIN
  apex_json.initialize_clob_output;

  apex_json.open_object;
  apex_json.write('hello', 'world');
  apex_json.close_object;

  dbms_output.put_line(apex_json.get_clob_output);

 apex_json.free_output;
 END;

FLUSHプロシージャ

このプロシージャは、保留中の変更をフラッシュします。closeプロシージャは自動的にフラッシュします。

構文

APEX_JSON.FLUSH

パラメータ

なし。

この例では、未完了のJSONを書き込みます。

BEGIN
  apex_json.open_object;
  apex_json.write('attr', 'value');
  apex_json.flush;
  sys.htp.p('the "}" is missing');
END;

GET_BOOLEANファンクション

このファンクションは、ブール数値を戻します。

構文

APEX_JSON.GET_BOOLEAN (
    p_path             IN VARCHAR2,
    p0                 IN VARCHAR2 DEFAULT NULL,
    p1                 IN VARCHAR2 DEFAULT NULL,
    p2                 IN VARCHAR2 DEFAULT NULL,
    p3                 IN VARCHAR2 DEFAULT NULL,
    p4                 IN VARCHAR2 DEFAULT NULL,
    p_default          IN BOOLEAN  DEFAULT NULL,
    p_values           IN t_values DEFAULT g_values )
RETURN BOOLEAN;

パラメータ

表15-5 GET_BOOLEANファンクションのパラメータ

パラメータ 説明

p_path

p_valuesへの索引。

p[0-4]

p_pathの各%NをpNで置き換え、i-th %sまたは%dをすべてp[i-1]で置き換えます。

p_default

メンバーが存在しない場合のデフォルト値。

p_values

解析されたJSONメンバー。デフォルトは、g_valuesです。


戻り値

表15-6 GET_BOOLEANファンクションの戻り値

戻り値 説明

TRUE

指定されたパスの位置にある値。

FALSE

指定されたパスの位置にある値。

NULL

指定されたパスの位置にある値。

VALUE_ERROR

p_values(p_path)がブール値ではない場合に、このエラーが発生します。


この例では、JSON文字列を解析し、位置にあるブール値を出力します。

DECLARE 
    j apex_json.t_values; 
BEGIN 
    apex_json.parse(j, '{ "items": [ 1, 2, { "foo": true } ] }'); 
    if apex_json.get_boolean(p_path=>'items[%d].foo', p0=>3,p_values=>j) then 
        dbms_output.put_line('items[3].foo is true'); 
END IF; 
END; 

GET_CLOB_OUTPUTファンクション

INITIALIZE_CLOB_OUTPUTを使用して作成した一時CLOBを戻します。

構文

function get_clob_output
    return clob;

この例では、CLOB出力用にAPEX_JSONを構成してJSONを生成し、DBMS_OUTPUTを使用してCLOBを出力し、最後にCLOBを解放します。

BEGIN
  apex_json.initialize_clob_output;

  apex_json.open_object;
  apex_json.write('hello', 'world');
  apex_json.close_object;

  dbms_output.put_line(apex_json.get_clob_output);

 apex_json.free_output;
 END;

GET_COUNTファンクション

このファンクションは、配列要素またはオブジェクト・メンバーの数を戻します。

構文

APEX_JSON.GET_COUNT (
    p_path             IN VARCHAR2,
    p0                 IN VARCHAR2 DEFAULT NULL,
    p1                 IN VARCHAR2 DEFAULT NULL,
    p2                 IN VARCHAR2 DEFAULT NULL,
    p3                 IN VARCHAR2 DEFAULT NULL,
    p4                 IN VARCHAR2 DEFAULT NULL,
    p_values           IN t_values DEFAULT g_values )
RETURN NUMBER;

パラメータ

表15-7 GET_COUNTファンクションのパラメータ

パラメータ 説明

p_path

p_valuesへの索引。

p[0-4]

p_pathの各%NをpNで置き換え、i-th %sまたは%dをすべてp[i-1]で置き換えます。

p_values

解析されたJSONメンバー。デフォルトは、g_valuesです。


戻り値/発生するエラー

表15-8 GET_COUNTファンクションの戻り値および発生するエラー

戻り値 説明

NUMBER

配列要素またはオブジェクト・メンバーの数、あるいは配列またはオブジェクトが見つからない場合はnull

VALUE_ERROR

p_values(p_path)が配列またはオブジェクトではない場合、このエラーが発生します。


この例では、JSON文字列を解析し、位置にあるメンバーの数を出力します。

DECLARE 
    j apex_json.t_values; 
BEGIN 
    apex_json.parse(j, '{ "foo": 3, "bar": [1, 2, 3, 4] }'); 
    dbms_output.put_line(apex_json.get_count(p_path=>'.',p_values=>j)); -- 2 (foo and bar) 
    dbms_output.put_line(apex_json.get_count(p_path=>'bar',p_values=>j)); -- 4 
END; 

GET_DATEファンクション

このファンクションは、日付メンバー値を戻します。

構文

APEX_JSON.GET_DATE (
    p_path             IN VARCHAR2,
    p0                 IN VARCHAR2 DEFAULT NULL,
    p1                 IN VARCHAR2 DEFAULT NULL,
    p2                 IN VARCHAR2 DEFAULT NULL,
    p3                 IN VARCHAR2 DEFAULT NULL,
    p4                 IN VARCHAR2 DEFAULT NULL,
    p_default          IN DATE     DEFAULT NULL,
    p_format           IN VARCHAR2 DEFAULT c_date_iso8601,
    p_values           IN t_values DEFAULT g_values )
RETURN DATE;

パラメータ

表15-9 GET_DATEファンクションのパラメータ

パラメータ 説明

p_path

p_valuesへの索引。

p[0-4]

p_pathの各%NをpNで置き換え、i-th %sまたは%dをすべてp[i-1]で置き換えます。

p_default

メンバーが存在しない場合のデフォルト値。

p_format

日付書式マスク。

p_values

解析されたJSONメンバー。デフォルトは、g_valuesです。


戻り値/発生するエラー

表15-10 GET_DATEファンクションの戻り値および発生するエラー

戻り値 説明

DATE

日付を戻します。

VALUE_ERROR

p_values(p_path)が日付ではない場合に、このエラーが発生します。


この例では、JSON文字列を解析し、位置にある値を出力します。

DECLARE 
    j apex_json.t_values; 
BEGIN 
    apex_json.parse(j, '{ "items": [ 1, 2, { "foo": "2014-04-29T10:08:00Z" }] }'); 
    
dbms_output.put_line(to_char(apex_json.get_date(p_path=>'items[%d].foo',p0=>3, p_values=>j), 'DD-Mon-YYYY')); 
END;

GET_MEMBERSファンクション

このファンクションは、オブジェクトのOBJECT_MEMBERS名の表を戻します。

構文

APEX_JSON.GET_MEMBERS (
    p_path             IN VARCHAR2,
    p0                 IN VARCHAR2 DEFAULT NULL,
    p1                 IN VARCHAR2 DEFAULT NULL,
    p2                 IN VARCHAR2 DEFAULT NULL,
    p3                 IN VARCHAR2 DEFAULT NULL,
    p4                 IN VARCHAR2 DEFAULT NULL,
    p_values           IN t_values DEFAULT g_values )
RETURN WWV_FLOW_T_VARCHAR2;

パラメータ

表15-11 GET_MEMBERSファンクションのパラメータ

パラメータ 説明

p_path

p_valuesへの索引。

p[0-4]

p_pathの各%NをpNで置き換え、i-th %sまたは%dをすべてp[i-1]で置き換えます。

p_values

解析されたJSONメンバー。デフォルトは、g_valuesです。


戻り値/発生するエラー

表15-12 GET_MEMBERSファンクションの戻り値および発生するエラー

戻り値 説明

OBJECT_MEMBERS

オブジェクトのOBJECT_MEMBERS、またはオブジェクトが見つからない場合はnull。

VALUE_ERROR

p_values(p_path)が配列またはオブジェクトではない場合、このエラーが発生します。


この例では、JSON文字列を解析し、位置にあるメンバーを出力します。

DECLARE 
    j apex_json.t_values; 
BEGIN 
    apex_json.parse(j, '{ "foo": 3, "bar": [1, 2, 3, 4] }'); 
    dbms_output.put_line(apex_json.get_members(p_path=>'.',p_values=>j)(1)); -- foo
    dbms_output.put_line(apex_json.get_members(p_path=>'.',p_values=>j)(2)); -- bar 
END; 

GET_NUMBERファンクション

このファンクションは、数値を戻します。

構文

APEX_JSON.GET_NUMBER (
    p_path             IN VARCHAR2,
    p0                 IN VARCHAR2 DEFAULT NULL,
    p1                 IN VARCHAR2 DEFAULT NULL,
    p2                 IN VARCHAR2 DEFAULT NULL,
    p3                 IN VARCHAR2 DEFAULT NULL,
    p4                 IN VARCHAR2 DEFAULT NULL,
    p_default          IN BOOLEAN DEFAULT NULL,
    p_values           IN t_values DEFAULT g_values )
RETURN NUMBER;

パラメータ

表15-13 GET_NUMBERファンクションのパラメータ

パラメータ 説明

p_path

p_valuesへの索引。

p[0-4]

p_pathの各%NをpNで置き換え、i-th %sまたは%dをすべてp[i-1]で置き換えます。

p_default

メンバーが存在しない場合のデフォルト値。

p_values

解析されたJSONメンバー。デフォルトは、g_valuesです。


戻り値/発生するエラー

表15-14 GET_NUMBERファンクションの戻り値および発生するエラー

戻り値 説明

NUMBER

指定されたパスの位置にある値。

VALUE_ERROR

p_values(p_path)が数値ではない場合に、このエラーが発生します。


この例では、JSON文字列を解析し、位置にある値を出力します。

DECLARE 
    j apex_json.t_values; 
BEGIN 
    apex_json.parse(j, '{ "items": [ 1, 2, { "foo": 42 } ] }'); 
    dbms_output.put_line(apex_json.get_number(p_path=>'items[%d].foo',p0=> 3,p_values=>j)); 
END; 

GET_VALUEファンクション

このファンクションはt_valueを戻します。

構文

APEX_JSON.GET_VALUE (
    p_path             IN VARCHAR2,
    p0                 IN VARCHAR2 DEFAULT NULL,
    p1                 IN VARCHAR2 DEFAULT NULL,
    p2                 IN VARCHAR2 DEFAULT NULL,
    p3                 IN VARCHAR2 DEFAULT NULL,
    p4                 IN VARCHAR2 DEFAULT NULL,
    p_values           IN t_values DEFAULT g_values )
RETURN t_value;

パラメータ

表15-15 GET_VALUEファンクションのパラメータ

パラメータ 説明

p_path

p_valuesへの索引。

p[0-4]

p_pathの各%NをpNで置き換え、i-th %sまたは%dをすべてp[i-1]で置き換えます。

p_values

解析されたJSONメンバー。デフォルトは、g_valuesです。


戻り値/発生するエラー

表15-16 GET_VALUEファンクションの戻り値および発生するエラー

戻り値 説明

t_value

指定されたパスの位置にあるt_value。データが見つからない場合、レコード属性はnullです。

VALUE_ERROR

p_values(p_path)が配列またはオブジェクトではない場合、このエラーが発生します。


この例では、JSON文字列を解析し、位置にある値の属性を出力します。

DECLARE
    j apex_json.t_values; 
    v apex_json.t_value; 
BEGIN 
    apex_json.parse(j, '{ "foo": 3, "bar": [1, 2, 3, 4] }'); 
    v := apex_json.get_value(p_path=>'bar[%d]',p0=> 2,p_values=>j); -- returns the t_value for bar[2] 
    dbms_output.put_line(v.number_value); -- 2 
    v := apex_json.get_value(p_path=>'does.not.exist',p_values=>j); 
    dbms_output.put_line(case when v.kind is null then 'not found!' end); 
END; 

GET_VARCHAR2ファンクション

このファンクションは、varchar2メンバー値を戻します。このファンクションは、ブール値および数値をvarchar2値に変換します。

構文

APEX_JSON.GET_VARCHAR2 (
    p_path             IN VARCHAR2,
    p0                 IN VARCHAR2 DEFAULT NULL,
    p1                 IN VARCHAR2 DEFAULT NULL,
    p2                 IN VARCHAR2 DEFAULT NULL,
    p3                 IN VARCHAR2 DEFAULT NULL,
    p4                 IN VARCHAR2 DEFAULT NULL,
    p_default          IN BOOLEAN  DEFAULT NULL,
    p_values           IN t_values DEFAULT g_values )
RETURN VARCHAR2;

パラメータ

表15-17 GET_VARCHAR2ファンクションのパラメータ

パラメータ 説明

p_path

p_valuesへの索引。

p[0-4]

p_pathの各%NをpNで置き換え、i-th %sまたは%dをすべてp[i-1]で置き換えます。

p_default

メンバーが存在しない場合のデフォルト値。

p_values

解析されたJSONメンバー。デフォルトは、g_valuesです。


戻り値/発生するエラー

表15-18 GET_VARCHAR2ファンクションの戻り値および発生するエラー

戻り値 説明

VARCHAR2

これは指定されたパスの位置にある値です。

VALUE_ERROR

p_values(p_path)が配列またはオブジェクトではない場合、このエラーが発生します。


この例では、JSON文字列を解析し、位置にある値を出力します。

DECLARE 
    j apex_json.t_values; 
BEGIN 
    apex_json.parse(j, '{ "items": [ 1, 2, { "foo": 42 } ] }'); 
    dbms_output.put_line(apex_json.get_varchar2(p_path=>'items[%d].foo',p0=> 3,p_values=>j)); 
END;

INITIALIZE_CLOB_OUTPUTプロシージャ

一時CLOBに書き込むために出力インタフェースを初期化します。デフォルトではSYS.HTPに書き込みます。CLOB出力を使用している場合は、最後にFREE_OUTPUT()をコールしてCLOBを解放する必要があります。

構文

APEX_JSON.INITIALIZE_CLOB_OUTPUT (
    p_dur         in pls_integer default sys.dbms_lob.call,
    p_cache       in boolean     default true,
    p_indent      in pls_integer default null );

パラメータ

表15-19 INITIALIZE_CLOB_OUTPUTプロシージャのパラメータ

パラメータ 説明

p_dur

一時CLOBの継続時間。指定可能な値はDBMS_LOB.SESSIONまたはDBMS_LOB.CALL(デフォルト)です。

p_cache

LOBをバッファ・キャッシュに読み込むかどうかを指定します。

p_indent

インデント・レベル。デフォルトは、デバッグが有効な場合は2、それ以外の場合は0です。


この例では、CLOB出力用にAPEX_JSONを構成してJSONを生成し、DBMS_OUTPUTを使用してCLOBを出力し、最後にCLOBを解放します。

BEGIN
  apex_json.initialize_clob_output;

  apex_json.open_object;
  apex_json.write('hello', 'world');
  apex_json.close_object;

  dbms_output.put_line(apex_json.get_clob_output);

 apex_json.free_output;
 END;

INITIALIZE_OUTPUTプロシージャ

このプロシージャは、出力インタフェースを初期化します。次に示すパラメータを変更する場合のみ、このプロシージャをコールする必要があります。出力は最初、パラメータの表で説明されているデフォルトですでに構成されています。

構文

APEX_JSON.INITIALIZE_OUTPUT (
    p_http_header     in boolean     default true,
    p_http_cache      in boolean     default false,
    p_http_cache_etag in varchar2    default null, 
    p_indent          in pls_integer default null );

パラメータ

表15-20 INITIALIZE_OUTPUTプロシージャのパラメータ

パラメータ 説明

p_http_header

TRUE (デフォルト)の場合、アプリケーション/JSONのMIMEタイプ・ヘッダーを書き込みます。

p_http_cache

このパラメータは、p_write_headerがTRUEの場合のみ関連があります。TRUEの場合、Cache-Control: max-age=315360000と書き込みます。FALSE (デフォルト)の場合、Cache-Control: no-cacheと書き込みます。それ以外の場合、Cache-Controlを書き込みません。

http_cache_etag

nullでない場合、etagヘッダーを書き込みます。このパラメータは、P_HTTP_CACHEがTRUEの場合のみ使用されます。

p_indent

インデント・レベル。デフォルトは、デバッグが有効な場合は2、それ以外の場合は0です。


この例では、デフォルトのヘッダーは直接書き込まれるため、生成しないようにAPEX_JSONを構成します。

BEGIN
  apex_json.initialize_output (
      p_http_header => false );
 
  sys.owa_util.mime_header('application/json', false);
  sys.owa_util.status_line(429, 'Too Many Requests');
  sys.owa_util.http_header_close;
  --
  apex_json.open_object;
  apex_json.write('maxRequestsPerSecond', 10);
  apex_json.close_object;
END;

OPEN_ARRAYプロシージャ

このプロシージャは、次のような左大カッコを書き込みます。

[

構文

APEX_JSON.OPEN_ARRAY (
    p_name     IN VARCHAR2 DEFAULT NULL );

パラメータ

表15-21 OPEN_ARRAYプロシージャのパラメータ

パラメータ 説明

p_name

nullでない場合、左大カッコの前にオブジェクト属性名およびコロンを書き込みます。


この例では、write { "array":[ 1 ,[ ] ] }を実行します。

BEGIN
  apex_json.open_object; -- {
  apex_json.open_array('array'); -- "array": [
  apex_json.write(1); -- 1
  apex_json.open_array; -- , [
  apex_json.close_array; -- ]
  apex_json.close_array; -- ]
  apex_json.close_object; -- }
END;

OPEN_OBJECTプロシージャ

このプロシージャは、次のような左中カッコを書き込みます。

{

構文

APEX_JSON.OPEN_OBJECT (
    p_name     IN VARCHAR2 DEFAULT NULL );

パラメータ

表15-22 OPEN_OBJECTプロシージャのパラメータ

パラメータ 説明

p_name

nullでない場合、左中カッコの前にオブジェクト属性名およびコロンを書き込みます。


この例では、write { "obj": { "obj-attr": "value" }}を実行します。

BEGIN
  apex_json.open_object; -- {
  apex_json.open_object('obj'); -- "obj": {
  apex_json.write('obj-attr', 'value'); -- "obj-attr": "value"
  apex_json.close_all; -- }}
END;

PARSEプロシージャのシグネチャ1

このプロシージャは、JSON形式のvarchar2またはclobを解析し、メンバーをp_valuesに格納します。

構文

APEX_JSON.PARSE (
    p_values   in out nocopy t_values,
    p_source   in varchar2,
    p_strict   in boolean default true );

APEX_JSON.PARSE (
    p_values   in out nocopy t_values,
    p_source   in clob,
    p_strict   in boolean default true );

パラメータ

表15-23 PARSEプロシージャのパラメータ

パラメータ 説明

p_values

JSONメンバーと値が格納されるvarchar2別索引の結果配列。デフォルトは、g_valuesです。

p_source

JSONソース(varchar2またはclob)

p_strict

TRUE (デフォルト)の場合、厳密なJSONルールを強制します


この例では、JSONを解析し、メンバー値を出力します。

DECLARE
    l_values apex_json.t_values;
BEGIN
    apex_json.parse (
        p_values => l_values,
        p_source => '{ "type": "circle", "coord": [10, 20] }' );
    sys.htp.p('Point at '||
        apex_json.get_number (
            p_values => l_values,
            p_path   => 'coord[1]')||
        ','||
        apex_json.get_number (
            p_values => l_values,
            p_path   => 'coord[2]'));
END;

PARSEプロシージャのシグネチャ2

このプロシージャは、JSON形式のvarchar2またはclobを解析し、メンバーをパッケージのグローバルのg_valuesに格納します。この簡略化されたAPIの動作は、parse()プロシージャのシグネチャ1と似ていますが、開発者が解析されたJSONデータ用のローカル変数を宣言し、各JSON APIコールに渡す必要がありません。

構文

APEX_JSON.PARSE (
    p_source   IN VARCHAR2,
    p_strict   IN BOOLEAN DEFAULT TRUE );

APEX_JSON.PARSE (
    p_source   IN CLOB,
    p_strict   IN BOOLEAN DEFAULT TRUE );

パラメータ

表15-24 PARSEプロシージャのパラメータ

パラメータ 説明

p_source

JSONソース(varchar2またはclob)。

p_strict

TRUE (デフォルト)の場合、厳密なJSONルールを強制します。


この例では、JSONを解析し、メンバー値を出力します。

apex_json.parse('{ "type": "circle", "coord": [10, 20] }');
sys.htp.p('Point at '||
    apex_json.get_number(p_path=>'coord[1]')||
    ','||
    apex_json.get_number(p_path=>'coord[2]'));

STRINGIFYファンクションのシグネチャ1

このファンクションは、文字列をエスケープされたJSON値に変換します。

構文

APEX_JSON.STRINGIFY (
    p_value  IN VARCHAR2 )
RETURN VARCHAR2;

パラメータ

表15-25 STRINGIFYファンクションのパラメータ

パラメータ 説明

p_value

変換される文字列。


戻り値

表15-26 STRINGIFYファンクションの戻り値

戻り値 説明

VARCHAR2

変換後のエスケープされたJSON値。


この例は、JSONのvarchar2値を戻す問合せです。

select apex_json.stringify('line 1'||chr(10)||'line 2') from dual;

STRINGIFYファンクションのシグネチャ2

このファンクションは、数値をエスケープされたJSON値に変換します。

構文

APEX_JSON.STRINGIFY (
    p_value  IN NUMBER )
RETURN VARCHAR2;

パラメータ

表15-27 STRINGIFYファンクションのパラメータ

パラメータ 説明

p_value

変換される数値。


戻り値

表15-28 STRINGIFYファンクションの戻り値

戻り値 説明

VARCHAR2

変換後のエスケープされたJSON値。


この例は、JSONの数値を戻す問合せです。

select apex_json.stringify(-1/10) from dual

STRINGIFYファンクションのシグネチャ3

このファンクションは、日付をエスケープされたJSON値に変換します。

構文

APEX_JSON.STRINGIFY (
    p_value  IN DATE,
    p_format IN VARCHAR2 DEFAULT c_date_iso8601 )
RETURN VARCHAR2;

パラメータ

表15-29 STRINGIFYファンクションのパラメータ

パラメータ 説明

p_value

変換される日付値です。


戻り値

表15-30 STRINGIFYファンクションの戻り値

戻り値 説明

VARCHAR2

変換後のエスケープされたJSON値。


この例は、日付への変換に適したJSONのvarchar2値を戻す問合せです。

select apex_json.stringify(sysdate) from dual

STRINGIFYファンクションのシグネチャ4

このファンクションは、ブール値をエスケープされたJSON値に変換します。

構文

APEX_JSON.STRINGIFY (
    p_value  IN BOOLEAN,
RETURN VARCHAR2;

パラメータ

表15-31 STRINGIFYファンクションのパラメータ

パラメータ 説明

p_value

変換されるブール値です。


戻り値

表15-32 STRINGIFYファンクションの戻り値

戻り値 説明

VARCHAR2

変換後のエスケープされたJSON値。


この例では、JSONのブール値を出力します。

BEGIN
  sys.htp.p(apex_json.stringify(true));
  sys.htp.p(apex_json.stringify(false));
END;

TO_XMLTYPEファンクション

このプロシージャは、JSON形式のvarchar2またはCLOBを解析し、XMLTypeに変換します。

構文

APEX_JSON.TO_XMLTYPE (
    p_source   IN VARCHAR2,
    p_strict   IN BOOLEAN DEFAULT TRUE )
RETURN sys.xmltype;

APEX_JSON.TO_XMLTYPE (
    p_source   IN CLOB,
    p_strict   IN BOOLEAN DEFAULT TRUE )
RETURN sys.xmltype;

パラメータ

表15-33 TO_XMLTYPEファンクションのパラメータ

パラメータ 説明

p_source

JSONソース(VARCHAR2またはCLOB)

p_strict

TRUE (デフォルト)の場合、厳密なJSONルールを強制します


戻り値

表15-34 TO_XMLTYPEファンクションの戻り値

戻り値 説明

sys.xmltype

JSONデータのxmltype表現。


この例では、JSONを解析し、XML表現を出力します。

DECLARE
    l_xml xmltype;
BEGIN
    l_xml := apex_json.to_xmltype('{ "items": [ 1, 2, { "foo": true } ] }');
    dbms_output.put_line(l_xml.getstringval);
END;

WRITEプロシージャのシグネチャ1

このプロシージャは、型VARCHAR2の配列属性を書き込みます。

構文

APEX_JSON.WRITE (
    p_value    IN VARCHAR2 );

パラメータ

表15-35 WRITEプロシージャのパラメータ

パラメータ 説明

p_value

書き込まれる値。


この例では、1、"two"、"long text"、false、現在の日付およびXML文書のJSON表現が格納されている配列を書き込みます。

DECLARE
  l_clob clob := 'long text';
  l_xml sys.xmltype := sys.xmltype('<obj><foo>1</foo><bar>2</bar></obj>');
BEGIN
  apex_json.open_array; -- [
  apex_json.write(1); -- 1
  apex_json.write('two'); -- , "two"
  apex_json.write(l_clob); -- , "long text"
  apex_json.write(false); -- , false
  apex_json.write(sysdate); -- , "2014-05-05T05:36:08Z"
  apex_json.write(l_xml); -- , { "foo": 1, "bar": 2 }
  apex_json.close_array; -- ]
END;

WRITEプロシージャのシグネチャ2

このプロシージャは、型clobの配列属性を書き込みます。

構文

APEX_JSON.WRITE (
    p_value    IN CLOB );

パラメータ

表15-36 WRITEプロシージャのパラメータ

パラメータ 説明

p_value

書き込まれる値。


「WRITEプロシージャのシグネチャ1」を参照してください。

WRITEプロシージャのシグネチャ3

このプロシージャは、型NUMBERの配列属性を書き込みます。

構文

APEX_JSON.WRITE (
    p_value    IN NUMBER );

パラメータ

表15-37 WRITEプロシージャのパラメータ

パラメータ 説明

p_value

書き込まれる値。


「WRITEプロシージャのシグネチャ1」を参照してください。

WRITEプロシージャのシグネチャ4

このプロシージャは、型dateの配列属性を書き込みます

構文

APEX_JSON.WRITE (
    p_value    IN DATE,
    p_format   IN VARCHAR2 DEFAULT c_date_iso8601 );

パラメータ

表15-38 WRITEプロシージャのパラメータ

パラメータ 説明

p_value

書き込まれる値。

p_format

日付書式マスク(デフォルトはc_date_iso8601)。


「WRITEプロシージャのシグネチャ1」を参照してください。

WRITEプロシージャのシグネチャ5

このプロシージャは、型booleanの配列属性を書き込みます。

構文

APEX_JSON.WRITE (
    p_value    IN BOOLEAN );

パラメータ

表15-39 WRITEプロシージャのパラメータ

パラメータ 説明

p_value

書き込まれる値。


「WRITEプロシージャのシグネチャ1」を参照してください。

WRITEプロシージャのシグネチャ6

このプロシージャは、型sys.xmltypeの配列属性を書き込みます。プロシージャでは、XSL変換を使用してJSONを生成します。値のJSON型を決めるには、次のルールに従います。

  • 値が空である場合、NULL値を生成します。

  • 大文字(値)がTRUEの場合、ブール値TRUEを生成します。

  • 大文字(値)がFALSEの場合、ブール値FALSEを生成します。

  • XPath numberファンクションがTRUEを戻した場合、その値をそのまま生成します。それ以外の場合、その値を引用符で囲みます(つまり、JSON文字列として処理します)。

構文

APEX_JSON.WRITE (
    p_value    IN sys.xmltype );

パラメータ

表15-40 WRITEプロシージャのパラメータ

パラメータ 説明

p_value

書き込まれる値。


「WRITEプロシージャのシグネチャ1」を参照してください。

WRITEプロシージャのシグネチャ7

このプロシージャは、カーソルが戻す行がすべて格納された配列を書き込みます。各行は別個のオブジェクトです。問合せにオブジェクト・タイプ、コレクションまたはカーソルの列が含まれる場合、プロシージャではwrite(xmltype)を使用してJSONを生成します。それ以外の場合は、DBMS_SQLを使用して行をフェッチし、該当する列データ型のwrite()プロシージャを出力に使用します。列の型がvarchar2で、大文字の値が'TRUE'または'FALSE'である場合、ブール値を生成します。

構文

APEX_JSON.WRITE (
    p_cursor      IN OUT NOCOPY sys_refcursor );

パラメータ

表15-41 WRITEプロシージャのパラメータ

パラメータ 説明

p_cursor

カーソル。


例1

この例では、部門10および20のJSONオブジェクトが格納されている配列を書き込みます。

DECLARE
    c sys_refcursor;
BEGIN
    open c for select deptno, dname, loc from dept where deptno in (10, 20);
    apex_json.write(c);
END;

出力は次のとおりです。

[ { "DEPTNO":10 ,"DNAME":"ACCOUNTING" ,"LOC":"NEW YORK" }
, { "DEPTNO":20 ,"DNAME":"RESEARCH" ,"LOC":"DALLAS" } ]

WRITEプロシージャのシグネチャ8

このプロシージャは、型VARCHAR2のオブジェクト属性を書き込みます。

構文

APEX_JSON.WRITE (
    p_name         IN VARCHAR2,
    p_value        IN VARCHAR2,
    p_write_null   IN BOOLEAN  DEFAULT FALSE );

パラメータ

表15-42 WRITEプロシージャのパラメータ

パラメータ 説明

p_name

属性名。

p_value

書き込まれる属性値。

p_write_null

TRUEの場合、NULL値が書き込まれます。FALSE (デフォルト)の場合、NULLは書き込まれません。


この例では、様々な型の名前付きメンバー属性を持つオブジェクトを1つ書き込みます。文の右側のコメントは、生成される出力を示します。

DECLARE
  l_clob clob := 'long text';
  l_xml sys.xmltype := sys.xmltype('<obj><foo>1</foo><bar>2</bar></obj>');
BEGIN
  apex_json.open_object; -- {
  apex_json.write('a1', 1); -- "a1": 1
  apex_json.write('a2', 'two'); -- ,"a2": "two"
  apex_json.write('a3', l_clob); -- ,"a3": "long text"
  apex_json.write('a4', false); -- ,"a4": false
  apex_json.write('a5', sysdate); -- ,"a5": "2014-05-05T05:36:08Z"
  apex_json.write('a6', l_xml); -- ,"a6": { "foo": 1, "bar": 2 }
  apex_json.close_object; -- }
END;

WRITEプロシージャのシグネチャ9

このプロシージャは、型CLOBのオブジェクト属性を書き込みます。

構文

APEX_JSON.WRITE (
    p_name     IN VARCHAR2,
    p_value    IN CLOB,
    p_write_null   IN BOOLEAN  DEFAULT FALSE );

パラメータ

表15-43 WRITEプロシージャのパラメータ

パラメータ 説明

p_name

属性名。

p_value

書き込まれる属性値。

p_write_null

TRUEの場合、NULL値が書き込まれます。FALSE (デフォルト)の場合、NULLは書き込まれません。


「WRITEプロシージャのシグネチャ8」の例を参照してください。

WRITEプロシージャのシグネチャ10

このプロシージャは、型NUMBERのオブジェクト属性を書き込みます。

構文

APEX_JSON.WRITE (
    p_name     IN VARCHAR2,
    p_value    IN NUMBER,
    p_write_null   IN BOOLEAN  DEFAULT FALSE );

パラメータ

表15-44 WRITEプロシージャのパラメータ

パラメータ 説明

p_name

属性名。

p_value

書き込まれる属性値。

p_write_null

TRUEの場合、NULL値が書き込まれます。FALSE (デフォルト)の場合、NULLは書き込まれません。


「WRITEプロシージャのシグネチャ8」の例を参照してください。

WRITEプロシージャのシグネチャ11

このプロシージャは、型dateのオブジェクト属性を書き込みます。

構文

APEX_JSON.WRITE (
    p_name     IN VARCHAR2,
    p_value    IN DATE,
    p_format   IN VARCHAR2 DEFAULT c_date_iso8691,
    p_write_null   IN BOOLEAN  DEFAULT FALSE );

パラメータ

表15-45 WRITEプロシージャのパラメータ

パラメータ 説明

p_name

属性名。

p_value

書き込まれる属性値。

p_format

日付書式マスク(デフォルトはwwv_flow_json.c_date_iso8601)。

p_write_null

TRUEの場合、NULL値が書き込まれます。FALSE (デフォルト)の場合、NULLは書き込まれません。


「WRITEプロシージャのシグネチャ8」の例を参照してください。

WRITEプロシージャのシグネチャ12

このプロシージャは、型booleanのオブジェクト属性を書き込みます。

構文

APEX_JSON.WRITE (
    p_name     IN VARCHAR2,
    p_value    IN BOOLEAN,
    p_write_null   IN BOOLEAN  DEFAULT FALSE );

パラメータ

表15-46 WRITEプロシージャのパラメータ

パラメータ 説明

p_name

属性名。

p_value

書き込まれる属性値。

p_write_null

TRUEの場合、NULL値が書き込まれます。FALSE (デフォルト)の場合、NULLは書き込まれません。


「WRITEプロシージャのシグネチャ8」の例を参照してください。

WRITEプロシージャのシグネチャ13

このプロシージャは、カーソルが戻す行がすべて格納された配列が値である属性を書き込みます。各行は別個のオブジェクトです。

問合せにオブジェクト・タイプ、コレクションまたはカーソルの列が含まれる場合、プロシージャではwrite(p_name,<xmltype>)を使用します。「WRITEプロシージャのシグネチャ14」を参照してください。それ以外の場合は、DBMS_SQLを使用して行をフェッチし、該当する列データ型のwrite()プロシージャを出力に使用します。列の型がvarchar2で、大文字の値が'TRUE'または'FALSE'である場合、ブール値を生成します。

構文

APEX_JSON.WRITE (
    p_name        IN VARCHAR2,
    p_cursor      IN OUT NOCOPY sys_refcursor );
 

パラメータ

表15-47 WRITEプロシージャのパラメータ

パラメータ 説明

p_name

属性名。

p_cursor

カーソル。


この例では、部門10および20のJSONオブジェクトが格納されている配列を、オブジェクト・メンバー属性として書き込みます。

DECLARE
  c sys_refcursor;
BEGIN
  open c for select deptno,
                    dname,
                    cursor(select empno,
                                  ename
                             from emp e
                            where e.deptno=d.deptno) emps
               from dept d;
  apex_json.open_object;
  apex_json. write('departments', c);
  apex_json.close_object;
END;
 
{ "departments":[
      {"DEPTNO":10,
       "DNAME":"ACCOUNTING",
       "EMPS":[{"EMPNO":7839,"ENAME":"KING"}]},
      ...
     ,{"DEPTNO":40,"DNAME":"OPERATIONS","EMPS":null}] }

WRITEプロシージャのシグネチャ14

このプロシージャは、型sys.xmltypeの配列属性を書き込みます。プロシージャでは、XSL変換を使用してJSONを生成します。値のJSON型を決めるには、次のルールに従います。

  • 値が空である場合、NULL値を生成します。

  • 大文字(値)がTRUEの場合、ブール値TRUEを生成します。

  • 大文字(値)がFALSEの場合、ブール値FALSEを生成します。

  • XPath numberファンクションがTRUEを戻した場合、その値をそのまま生成します。それ以外の場合、その値を引用符で囲みます(つまり、JSON文字列として処理します)。

構文

APEX_JSON.WRITE (
    p_name     IN VARCHAR2,
    p_value    IN sys.xmltype,
    p_write_null   IN BOOLEAN  DEFAULT FALSE );

パラメータ

表15-48 WRITEプロシージャのパラメータ

パラメータ 説明

p_name

属性名。

p_value

書き込まれる値。XMLはJSONに変換されます

p_write_null

TRUEの場合、NULL値が書き込まれます。FALSE (デフォルト)の場合、NULLは書き込まれません。


「WRITEプロシージャのシグネチャ13」の例を参照してください。

WRITEプロシージャのシグネチャ15

このプロシージャは、解析されたAPEX_JSON.t_values表の部分を書き込みます。

構文

APEX_JSON.WRITE (
    p_values           IN t_values,
    p_path             IN VARCHAR2 DEFAULT '.',
    p0                 IN VARCHAR2 DEFAULT NULL,
    p1                 IN VARCHAR2 DEFAULT NULL,
    p2                 IN VARCHAR2 DEFAULT NULL,
    p3                 IN VARCHAR2 DEFAULT NULL,
    p4                 IN VARCHAR2 DEFAULT NULL );

パラメータ

表15-49 WRITEプロシージャのパラメータ

パラメータ 説明

p_values

解析されたJSONメンバー。

p_path

p_valuesへの索引。

p[0-4]

p_pathの各%NをpNで置き換え、i-th %sまたは%dをすべてp[i-1]で置き換えます。


この例では、JSON文字列を解析し、その部分を書き込みます。

DECLARE
  j apex_json.t_values;
BEGIN
  apex_json.parse(j, '{ "foo": 3, "bar": { "x": 1, "y": 2 }}');
  apex_json.write(j,'bar');
END;

WRITEプロシージャのシグネチャ16

このプロシージャは、解析されたAPEX_JSON.t_values表の部分をオブジェクト・メンバー属性として書き込みます。

構文

APEX_JSON.WRITE (
    p_name             IN VARCHAR2,
    p_values           IN t_values,
    p_path             IN VARCHAR2 DEFAULT '.',
    p0                 IN VARCHAR2 DEFAULT NULL,
    p1                 IN VARCHAR2 DEFAULT NULL,
    p2                 IN VARCHAR2 DEFAULT NULL,
    p3                 IN VARCHAR2 DEFAULT NULL,
    p4                 IN VARCHAR2 DEFAULT NULL,
    p_write_null       IN BOOLEAN  DEFAULT FALSE ); 

パラメータ

表15-50 WRITEプロシージャのパラメータ

パラメータ 説明

p_name

属性名。

p_values

解析されたJSONメンバー。

p_path

p_valuesへの索引。

p[0-4]

p_pathの各%NをpNで置き換え、i-th %sまたは%dをすべてp[i-1]で置き換えます。

p_write_null

TRUEの場合、NULL値が書き込まれます。FALSE (デフォルト)の場合、NULLは書き込まれません。


この例では、JSON文字列を解析し、その部分をオブジェクト・メンバーとして書き込みます。

DECLARE
  j apex_json.t_values;
BEGIN
  apex_json.parse(j, '{ "foo": 3, "bar": { "x": 1, "y": 2 }}');
  apex_json.open_object; -- {
  apex_json.write('parsed-bar',j,'bar');-- "parsed-bar":{ "x":1 ,"y":2 }
  apex_json.close_object; -- }
END;