Plsql 如何获取数组值的PL/JSON数组

Plsql 如何获取数组值的PL/JSON数组,plsql,oracle11g,pljson,Plsql,Oracle11g,Pljson,如何使用Pl/JSON从下面的JSON检索内容? 我需要获取第一个数组和第二个数组的值 { "documents1": [ { "key": "NATID", "validations": [ { "error": "Field is required" } ] } ] } 例如,我编写了如下的查询,它返回第一个数组的值,没有任何问题,但不返回数组的数组值 DECLARE

如何使用Pl/JSON从下面的JSON检索内容? 我需要获取第一个数组和第二个数组的值

 {
  "documents1": [
    { 
      "key": "NATID",
      "validations": [
        {
          "error": "Field is required"
        }
      ]
    }
  ]
} 
例如,我编写了如下的查询,它返回第一个数组的值,没有任何问题,但不返回数组的数组值

DECLARE
   obj                     json
      := json
           ('{
  "documents1": [
    { 
      "key": "NATID",
      "validations": [
        {
          "error": "Field is required"
        }
      ]
    }
  ]
}'
           );
   list_value              json_list;
   list_value_validation   json_list;
   LIST_VALUES             json_list;
BEGIN
   list_value := json_list (obj.get ('documents'));

   FOR i IN 1 .. list_value.COUNT
   LOOP
      DBMS_OUTPUT.put_line (   'key->'
                            || json_ext.get_string (json (list_value.get (i)),
                                                    'key'
                                                   )
                           );
      ----------below scripts are not working
      list_value_validation := json_list (list_value.get ('values'));

      FOR iv IN 1 .. list_value_validation.COUNT
      LOOP
         DBMS_OUTPUT.put_line
                    (   'error->'
                     || json_ext.get_string
                                          (json (list_value_validation.get (iv)
                                                ),
                                           'error'
                                          )
                    );
      END LOOP;
   END LOOP;
END;

修改代码如下,它的工作良好

BEGIN
   list_value := json_list (obj.get ('documents'));

   FOR i IN 1 .. list_value.COUNT
   LOOP
         p_string_docs := list_value.get (i).TO_CHAR ();

         obj_docs := json (p_string_docs);

         l_output := json_ext.get_string (obj_docs, 'key');

         list_docs_validation := json_list (obj_docs.get ('values'));

            FOR i IN 1 .. list_docs_validation.COUNT
            LOOP

            l_output :=
               json_ext.get_string (obj_docs, 'key')|| ' | ' 
            || json_ext.get_string (json (list_docs_validation.get (i)),
                                    'code'
                                   );

               DBMS_OUTPUT.put_line (l_output);                         


            END LOOP;
   END LOOP;
END;