2016-04-05 12 views
1

私はちょうどPL/JSONを使用し始めていると私は、例えば、最初の名前などの非配列データを、解析することができる午前:配列データを解析するPL/JSONを使用する方法

json_ext.get_string (json (l_list.get (i)), 'firstName'); 

しかし、Iアドレスなどの配列データを解析する方法を理解できません。たとえば、

street1 := json_ext.get_string (json (l_list.get (i)), 'addresses.street1'); 

は動作しません。

street1 := json_ext.get_string (json (l_list.get (i)), 'addresses.street1'); 

を例として使用して:

どのように私は正しく使用して、配列データを解析するのでしょうか?ここで

は、JSONの例である:ここで

[ 
    { 

"firstName": "Edward", 
"middleName": "Wolfgang", 
"lastName": "Munster",  
"addresses": [ 
    {  
    "city": "", 
    "addressType": "home", 
    "state": "CA", 
    "street1": "1313 Mockingbird Lane", 
    "street2": "" 
    }, 
    {   
    "city": "", 
    "addressType": "business", 
    "state": "CA", 
    "street1": "123 Morgan Rd.", 
    "street2": "" 
    } 
], 
} 

は、私が使用していたコードの例を次に示します。

BEGIN 
    SELECT json   
    INTO l_json 
    FROM json_table 
    WHERE id = 1; 
    EXCEPTION 
     WHEN NO_DATA_FOUND 
     THEN 
      l_json := NULL; 
    END; 


l_list := json_list (l_json); 

FOR i IN 1 .. l_list.COUNT 
LOOP 
--These parse correctly  
    firstname := json_ext.get_string (json (l_list.get (i)), 'firstName');   
    middlename := json_ext.get_string (json (l_list.get (i)), 'middleName'); 
    lastname := json_ext.get_string (json (l_list.get (i)), 'lastName');  

--These do not parse at all 
    addresstype := json_ext.get_string (json (l_list.get (i)), 'addresses.addressType');  
    street1 := json_ext.get_string (json (l_list.get (i)), 'addresses.street1'); 
    street2 := json_ext.get_string (json (l_list.get (i)), 'addresses.street2'); 
    city := json_ext.get_string (json (l_list.get (i)), 'addresses.city'); 
    state := json_ext.get_string (json (l_list.get (i)), 'addresses.state'); 
+0

すでに外部配列を解析しています。内側の配列を解析するのが難しいですか?それは同じ行動です。 –

+0

@JamesSumners内部配列のデータは返されません。 – user6146386

+0

@JamesSumners私の以前の答えに基づいて、私が間違って何をしているかについての洞察はありますか?json_ext.get_string(json(l_list.get(i))はネストされた内部配列に対しては機能しません。 – user6146386

答えて

0

それは非常に簡単です。リストを取得してそれを繰り返してください:

-- { 
-- "foo": "bar", 
-- "list": [ 
--  {"key": "value"}, 
--  {"key": "value"} 
-- ] 
-- } 

declare 
    json_data json := '<the above JSON>'; 
    list_value json_list; 
begin 
    list_value := json_data.get('list'); 

    for i in 1 .. list_value.count 
    loop 
    dbms_output.put_line('key = ' || list_value[i].get('key')); -- "key = value" 
    end; 
end; 
/
0

上記の例は私にとっては役に立たなかった。私は以下の作業をすることができました。

declare 
    json_data2 json; 
    json_data json := json('{ "foo": "bar", "list": [  {"key": "value1"},  {"key": "value2"} ] }'); 
    list_value json_list; 
begin 
    list_value := pljson_ext.get_json_list(json_data, 'list'); 

    dbms_output.put_line('Count = '||list_value.count); 

    for i in 1 .. list_value.count 
    loop 
    -- json_data2 := json(list_value.get(i)); 
json(list_value.get(i)).get('key').print; 
    -- dbms_output.put_line('key = ' || json_data2.get('key')); -- "key = value" 
    -- json_data2.get('key').print; 
    end loop; 
end; 
/
関連する問題