PL SQL Apex_JSON - 解析元素名称

Posted

技术标签:

【中文标题】PL SQL Apex_JSON - 解析元素名称【英文标题】:PL SQL Apex_JSON - Parse element name 【发布时间】:2020-12-02 11:35:34 【问题描述】:

我正在尝试从以下数组中获取值 -


   "list:" [
     
       "User.name":"AAA"
     ,
     
       "User.Name":"BBB"
     
  ]  

我试图获取 Name 值但我得到了 null -

for i in 1..Apex_Json.get_count('list') loop
     l_name := Apex_Json.Get_varchar2('list[%d].User.Name', i);
end loop;

如何获取名称值?

【问题讨论】:

【参考方案1】:

"list" 是 json 元素数组。 AFAIK 您无法直接访问元素,但您可以遍历数组以检查是否存在具有特定名称的元素。这是一个例子:

DECLARE
  l_json_text VARCHAR2(4000);
  l_json_values    apex_json.t_values;
  l_name      VARCHAR2(4000);
BEGIN
l_json_text := q'!

   "list": [
     
       "User.name":"AAA"
     ,
     
       "User.Name":"BBB"
     
  ]  

!';

  apex_json.parse(
    p_values => l_json_values,
    p_source => l_json_text
  );
  
  -- get nr of elements in the array and loop through it.    
  FOR r IN 1 .. APEX_JSON.get_count(p_path => 'list', p_values => l_json_values) LOOP
    -- get the value for User.Name for this array index. 
    -- If it is doesn't exist it will be NULL
    l_name := apex_json.get_varchar2(p_path => 'list[%d]."User.name"', p0 => r, p_values => l_json_values);
    IF l_name IS NOT NULL THEN
      DBMS_OUTPUT.put_line('"User.name":'||l_name);
    END IF;
  END LOOP;
END;
/

请注意,您的问题 json 中有一个错字:"list:" [ 应该是 "list": [

【讨论】:

以上是关于PL SQL Apex_JSON - 解析元素名称的主要内容,如果未能解决你的问题,请参考以下文章

在 PL/SQL 过程中解析具有名称空间的 XML 的未知数量节点?

PL/SQL: ORA-00942: 表或视图不存在

如何在嵌套数组中使用 apex_json.get_count

解析数学函数 PL/SQL

pl/sql 查询以通过 deptno 查找经理名称

PL/SQL:无法从包元素 PL/SQL 返回值