【问题标题】:PL SQL Apex_JSON - Parse element namePL SQL Apex_JSON - 解析元素名称
【发布时间】: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;

如何获取名称值?

【问题讨论】:

    标签: plsql oracle-apex plsqldeveloper


    【解决方案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": [

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 2012-03-11
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多