このパッケージには、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);
このプロシージャは、最も外側のネスト・レベルまでオブジェクトおよび配列をすべて閉じます。
構文
APEX_JSON.CLOSE_ALL;
パラメータ
なし。
例
「パッケージの概要および例」を参照してください。
このプロシージャは、次のような右大カッコを書き込みます。
]
構文
APEX_JSON.CLOSE_ARRAY ();
パラメータ
なし。
例
「パッケージの概要および例」を参照してください。
このプロシージャは、次のような右中カッコを書き込みます。
}
構文
APEX_JSON.CLOSE_OBJECT ();
パラメータ
なし。
例
「パッケージの概要および例」を参照してください。
このファンクションは、指定されたパスが既存の値を指しているかどうかを判別します。
構文
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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
|
|
解析されたJSONメンバー。デフォルトは、 |
戻り値
例
この例では、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;
このファンクションは、指定されたパターンに一致する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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
戻りパスの検索パターン。 |
|
|
|
値の検索パターン(オプション)。 |
|
解析されたJSONメンバー。デフォルトは、 |
戻り値/発生するエラー
表15-4 FIND_PATHS_LIKEファンクションの戻り値および発生するエラー
戻り値 | 説明 |
---|---|
|
パターンに一致するパスの表。 |
|
|
例
この例では、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;
出力リソースを解放します。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;
このプロシージャは、保留中の変更をフラッシュします。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;
このファンクションは、ブール数値を戻します。
構文
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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
|
|
メンバーが存在しない場合のデフォルト値。 |
|
解析されたJSONメンバー。デフォルトは、 |
戻り値
表15-6 GET_BOOLEANファンクションの戻り値
戻り値 | 説明 |
---|---|
|
指定されたパスの位置にある値。 |
|
指定されたパスの位置にある値。 |
|
指定されたパスの位置にある値。 |
|
|
例
この例では、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;
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;
このファンクションは、配列要素またはオブジェクト・メンバーの数を戻します。
構文
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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
|
|
解析されたJSONメンバー。デフォルトは、 |
戻り値/発生するエラー
表15-8 GET_COUNTファンクションの戻り値および発生するエラー
戻り値 | 説明 |
---|---|
|
配列要素またはオブジェクト・メンバーの数、あるいは配列またはオブジェクトが見つからない場合はnull |
|
|
例
この例では、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;
このファンクションは、日付メンバー値を戻します。
構文
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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
|
|
メンバーが存在しない場合のデフォルト値。 |
|
日付書式マスク。 |
|
解析されたJSONメンバー。デフォルトは、 |
戻り値/発生するエラー
表15-10 GET_DATEファンクションの戻り値および発生するエラー
戻り値 | 説明 |
---|---|
|
日付を戻します。 |
|
|
例
この例では、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;
このファンクションは、オブジェクトの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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
|
|
解析されたJSONメンバー。デフォルトは、 |
戻り値/発生するエラー
表15-12 GET_MEMBERSファンクションの戻り値および発生するエラー
戻り値 | 説明 |
---|---|
|
オブジェクトの |
|
|
例
この例では、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;
このファンクションは、数値を戻します。
構文
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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
|
|
メンバーが存在しない場合のデフォルト値。 |
|
解析されたJSONメンバー。デフォルトは、 |
戻り値/発生するエラー
表15-14 GET_NUMBERファンクションの戻り値および発生するエラー
戻り値 | 説明 |
---|---|
|
指定されたパスの位置にある値。 |
|
|
例
この例では、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;
このファンクションは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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
|
|
解析されたJSONメンバー。デフォルトは、 |
戻り値/発生するエラー
表15-16 GET_VALUEファンクションの戻り値および発生するエラー
戻り値 | 説明 |
---|---|
|
指定されたパスの位置にある |
|
|
例
この例では、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;
このファンクションは、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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
|
|
メンバーが存在しない場合のデフォルト値。 |
|
解析されたJSONメンバー。デフォルトは、 |
戻り値/発生するエラー
表15-18 GET_VARCHAR2ファンクションの戻り値および発生するエラー
戻り値 | 説明 |
---|---|
|
これは指定されたパスの位置にある値です。 |
|
|
例
この例では、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;
一時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 |
一時 |
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;
このプロシージャは、出力インタフェースを初期化します。次に示すパラメータを変更する場合のみ、このプロシージャをコールする必要があります。出力は最初、パラメータの表で説明されているデフォルトですでに構成されています。
構文
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
TRUE (デフォルト)の場合、アプリケーション/JSONのMIMEタイプ・ヘッダーを書き込みます。 |
|
このパラメータは、 |
|
nullでない場合、 |
|
インデント・レベル。デフォルトは、デバッグが有効な場合は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;
このプロシージャは、次のような左大カッコを書き込みます。
[
構文
APEX_JSON.OPEN_ARRAY ( p_name IN VARCHAR2 DEFAULT 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;
このプロシージャは、次のような左中カッコを書き込みます。
{
構文
APEX_JSON.OPEN_OBJECT ( p_name IN VARCHAR2 DEFAULT 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;
このプロシージャは、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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
JSONメンバーと値が格納される |
|
JSONソース( |
|
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;
このプロシージャは、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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
JSONソース( |
|
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]'));
このファンクションは、文字列をエスケープされたJSON値に変換します。
構文
APEX_JSON.STRINGIFY ( p_value IN VARCHAR2 ) RETURN VARCHAR2;
パラメータ
戻り値
例
この例は、JSONのvarchar2
値を戻す問合せです。
select apex_json.stringify('line 1'||chr(10)||'line 2') from dual;
このファンクションは、数値をエスケープされたJSON値に変換します。
構文
APEX_JSON.STRINGIFY ( p_value IN NUMBER ) RETURN VARCHAR2;
パラメータ
戻り値
例
この例は、JSONの数値を戻す問合せです。
select apex_json.stringify(-1/10) from dual
このファンクションは、日付をエスケープされたJSON値に変換します。
構文
APEX_JSON.STRINGIFY ( p_value IN DATE, p_format IN VARCHAR2 DEFAULT c_date_iso8601 ) RETURN VARCHAR2;
パラメータ
戻り値
例
この例は、日付への変換に適したJSONのvarchar2
値を戻す問合せです。
select apex_json.stringify(sysdate) from dual
このファンクションは、ブール値をエスケープされたJSON値に変換します。
構文
APEX_JSON.STRINGIFY ( p_value IN BOOLEAN, RETURN VARCHAR2;
パラメータ
戻り値
例
この例では、JSONのブール値を出力します。
BEGIN sys.htp.p(apex_json.stringify(true)); sys.htp.p(apex_json.stringify(false)); END;
このプロシージャは、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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
JSONソース( |
|
TRUE (デフォルト)の場合、厳密なJSONルールを強制します |
戻り値
例
この例では、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;
このプロシージャは、型VARCHAR2
の配列属性を書き込みます。
構文
APEX_JSON.WRITE ( p_value IN VARCHAR2 );
パラメータ
例
この例では、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;
このプロシージャは、型clob
の配列属性を書き込みます。
構文
APEX_JSON.WRITE ( p_value IN CLOB );
パラメータ
例
「WRITEプロシージャのシグネチャ1」を参照してください。
このプロシージャは、型NUMBER
の配列属性を書き込みます。
構文
APEX_JSON.WRITE ( p_value IN NUMBER );
パラメータ
例
「WRITEプロシージャのシグネチャ1」を参照してください。
このプロシージャは、型dateの配列属性を書き込みます
構文
APEX_JSON.WRITE ( p_value IN DATE, p_format IN VARCHAR2 DEFAULT c_date_iso8601 );
パラメータ
例
「WRITEプロシージャのシグネチャ1」を参照してください。
このプロシージャは、型boolean
の配列属性を書き込みます。
構文
APEX_JSON.WRITE ( p_value IN BOOLEAN );
パラメータ
例
「WRITEプロシージャのシグネチャ1」を参照してください。
このプロシージャは、型sys.xmltype
の配列属性を書き込みます。プロシージャでは、XSL変換を使用してJSONを生成します。値のJSON型を決めるには、次のルールに従います。
値が空である場合、NULL
値を生成します。
大文字(値)がTRUE
の場合、ブール値TRUEを生成します。
大文字(値)がFALSE
の場合、ブール値FALSEを生成します。
XPath
numberファンクションがTRUEを戻した場合、その値をそのまま生成します。それ以外の場合、その値を引用符で囲みます(つまり、JSON文字列として処理します)。
構文
APEX_JSON.WRITE ( p_value IN sys.xmltype );
パラメータ
例
「WRITEプロシージャのシグネチャ1」を参照してください。
このプロシージャは、カーソルが戻す行がすべて格納された配列を書き込みます。各行は別個のオブジェクトです。問合せにオブジェクト・タイプ、コレクションまたはカーソルの列が含まれる場合、プロシージャではwrite(xmltype)
を使用してJSONを生成します。それ以外の場合は、DBMS_SQL
を使用して行をフェッチし、該当する列データ型のwrite()
プロシージャを出力に使用します。列の型がvarchar2
で、大文字の値が'TRUE'
または'FALSE'
である場合、ブール値を生成します。
構文
APEX_JSON.WRITE ( p_cursor IN OUT NOCOPY sys_refcursor );
パラメータ
例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" } ]
このプロシージャは、型VARCHAR2
のオブジェクト属性を書き込みます。
構文
APEX_JSON.WRITE ( p_name IN VARCHAR2, p_value IN VARCHAR2, p_write_null IN BOOLEAN DEFAULT FALSE );
パラメータ
表15-42 WRITEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
属性名。 |
|
書き込まれる属性値。 |
|
TRUEの場合、 |
例
この例では、様々な型の名前付きメンバー属性を持つオブジェクトを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;
このプロシージャは、型CLOB
のオブジェクト属性を書き込みます。
構文
APEX_JSON.WRITE ( p_name IN VARCHAR2, p_value IN CLOB, p_write_null IN BOOLEAN DEFAULT FALSE );
パラメータ
表15-43 WRITEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
属性名。 |
|
書き込まれる属性値。 |
|
TRUEの場合、 |
例
「WRITEプロシージャのシグネチャ8」の例を参照してください。
このプロシージャは、型NUMBER
のオブジェクト属性を書き込みます。
構文
APEX_JSON.WRITE ( p_name IN VARCHAR2, p_value IN NUMBER, p_write_null IN BOOLEAN DEFAULT FALSE );
パラメータ
表15-44 WRITEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
属性名。 |
|
書き込まれる属性値。 |
|
TRUEの場合、 |
例
「WRITEプロシージャのシグネチャ8」の例を参照してください。
このプロシージャは、型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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
属性名。 |
|
書き込まれる属性値。 |
|
日付書式マスク(デフォルトは |
|
TRUEの場合、 |
例
「WRITEプロシージャのシグネチャ8」の例を参照してください。
このプロシージャは、型boolean
のオブジェクト属性を書き込みます。
構文
APEX_JSON.WRITE ( p_name IN VARCHAR2, p_value IN BOOLEAN, p_write_null IN BOOLEAN DEFAULT FALSE );
パラメータ
表15-46 WRITEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
属性名。 |
|
書き込まれる属性値。 |
|
TRUEの場合、 |
例
「WRITEプロシージャのシグネチャ8」の例を参照してください。
このプロシージャは、カーソルが戻す行がすべて格納された配列が値である属性を書き込みます。各行は別個のオブジェクトです。
問合せにオブジェクト・タイプ、コレクションまたはカーソルの列が含まれる場合、プロシージャでは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 );
パラメータ
例
この例では、部門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}] }
このプロシージャは、型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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
属性名。 |
|
書き込まれる値。XMLはJSONに変換されます |
|
TRUEの場合、 |
例
「WRITEプロシージャのシグネチャ13」の例を参照してください。
このプロシージャは、解析された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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
解析されたJSONメンバー。 |
|
|
|
|
例
この例では、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;
このプロシージャは、解析された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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
属性名。 |
|
解析されたJSONメンバー。 |
|
|
|
|
|
TRUEの場合、 |
例
この例では、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;