arrays - 如何使用PL/JSON解析数组数据

标签 arrays json pljson

我刚刚开始使用 PL/JSON,并且能够解析非数组数据,例如名字:

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

但是我不知道如何解析数组数据,例如地址,例如:

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');

最佳答案

上面的例子对我来说不起作用。我成功地完成了以下工作。

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;
/

关于arrays - 如何使用PL/JSON解析数组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36436006/

相关文章:

javascript - 在 PHP 和 Ajax 中使用 Json 传递值

javascript - 在javascript中将复杂类型的字符串数组转换为json

java - 如何在不创建任何中间字符串的情况下将 char[] 转换为 byte[]

jquery - 循环遍历 json key 检查其值是否为空

json - 如何在Oracle APEX中解析JSON数组数据

oracle - 如何使用 PL/JSON 将 JSON 对象转换为 varchar2

arrays - 将数组内容保存/加载到文件的最佳方法是什么?

javascript - AJAX 调用发送 JSON 数据

c# - DataTable 到 JSON 到 Controller 到 jqGrid