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

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;