このパッケージには、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;