繁体   English   中英

循环通过 PLSQL 12.1 中的 JSON 阵列

Loop through JSON array in PLSQL 12.1

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我在 varchar 中有 JSON 数组

DECLARE
 JsonArray varchar2(1000);
 arrayCars varchar2(1000);      
BEGIN
  JsonArray :={"Cars": [{"name":"Honda", "color":"red" },
                        {"name":"Toyota", "color":"green"}] }
  SELECT JSON_QUERY(JsonArray, '$.Cars') into arrayCars FROM dual;
END;
/

现在如果我打印出 arrayCars 我会得到

[{"name":"Honda","color":"red"},{"name":"Toyota","color":"green"}]

但是我怎样才能遍历这个 Cars 数组并分别打印出它的组件(访问它们)?

1 个回复

您可以直接使用SQLJSON_TABLE() function 从Oracle DB 12.1.0.2版本开始可用

WITH t(arrayCars) AS
(
 SELECT JSON_QUERY('{"Cars": [{"name":"Honda", "color":"red" }, 
                              {"name":"Toyota", "color":"green"}] }', '$.Cars') 
   FROM dual
)
SELECT name, color
  FROM t
 CROSS JOIN JSON_TABLE(arrayCars,
                       '$' COLUMNS(NESTED PATH '$[*]'
                                    COLUMNS(
                                            name  VARCHAR2(100) PATH '$.name',
                                            color VARCHAR2(100) PATH '$.color'
                                            )
                                  )
          );

演示

如果你真的需要使用PL/SQL ,那么考虑创建一个 function 与SYS_REFCURSOR返回类型,例如

CREATE OR REPLACE FUNCTION Get_Cars RETURN SYS_REFCURSOR IS
  v_recordset SYS_REFCURSOR;
  JsonArray   VARCHAR2(1000);
  arrayCars   VARCHAR2(1000);
  v_sql       VARCHAR2(32767);  
BEGIN
  JsonArray :='{"Cars": [{"name":"Honda", "color":"red" },
                         {"name":"Toyota", "color":"green"}] }';
  arrayCars := JSON_QUERY(JsonArray, '$.Cars');
  DBMS_OUTPUT.PUT_LINE(arrayCars);

  v_sql := 
  'SELECT name,color
     FROM dual
    CROSS JOIN JSON_TABLE(:Cars,
                          ''$'' COLUMNS(NESTED PATH ''$[*]''
                                      COLUMNS(
                                              name  VARCHAR2(100) PATH ''$.name'',
                                              color VARCHAR2(100) PATH ''$.color''
                                              )
                                    )

            )';
  OPEN v_recordset FOR v_sql USING arrayCars;
  RETURN v_recordset;
END;
/

然后从 SQL 开发者控制台调用

SQL> DECLARE
    result SYS_REFCURSOR;
BEGIN
   :result := Get_Cars;
END;
/

SQL> PRINT result ;

编辑(您的最后评论):

或者,您可以使用简单的隐式循环,例如

SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  v_name   VARCHAR2(1000);
  v_color  VARCHAR2(1000);
BEGIN
   FOR c IN (
             SELECT name,color
               FROM JSON_TABLE('{"Cars": [{"name":"Honda", "color":"red" },
                                          {"name":"Toyota", "color":"green"}] }',
                                    '$' COLUMNS(NESTED PATH '$.Cars[*]'
                                                COLUMNS(
                                                        name  VARCHAR2(100) PATH '$.name',
                                                        color VARCHAR2(100) PATH '$.color'
                                                        )
                                                )
                               )
            )
   LOOP
     v_name  := c.name;
     v_color := c.color; 
     DBMS_OUTPUT.PUT_LINE(v_name||'  '||v_color);
   END LOOP;                            
END; 
/

演示2

1 循环遍历 JSON 中的数组

我创建了一个循环来循环使用此端点的 API 中的信息: 以这种格式返回数据(为了简化而减少): { "query": "allah", "total_count": 3394, "took": 153, "current_page": 1, "total_p ...

3 循环遍历 JSON 数组

我最近发布了另一个问题,用户立即为我指出了正确的方向。 这会正确返回数据,但我想执行一种“foreach”。 该数组包含有关多个传入和传出即时消息的数据。 因此,如果用户一次与多个人交谈,我需要遍历。 数组的结构如下。 非常感谢任何帮助。 ...

4 在JavaScript中循环遍历JSON数组

好的,所以我从GET请求中获得了一个大的JSON对象,它看起来像这样: 我正在尝试浏览该对象中的所有单个合作伙伴,但是除了“ undefined”外,我似乎无法返回任何东西。 我正在使用for循环尝试输入每个值,并且我要求它每次都提醒我,以便我可以看到它的内容。 你们能看到我在做什么 ...

5 在python中循环遍历json数组

我在导入脚本的数组中有JSON 我正在加载JSON并声明一个名为ip_address的变量。 我试图通过ip地址循环使用python。 我现在收到一个告诉我的错误 ...

6 循环通过 jQuery 列表中的 JSON 数组

我有这个 JSON 阵列 我希望它循环浏览我的列表视图,但不知道如何做到这一点,到目前为止我所能做的就是一次列出一个项目。 另外,我只能列出产品而不是产品 = 价格。 jQuery 论坛帮助...谢谢! 这是代码的rest 和 HTML 文件 ...

7 通过 PHP 中的嵌套 json 阵列循环

我需要遍历 PHP 中的嵌套 JSON 数组。 JSON 键并不总是相同的,请参见下面的示例: 到目前为止,我的代码是这样的: 问题是,当我尝试运行上面的代码时,我得到了more数组的错误: 理想情况下,output 应该是这样的: 关于如何将我的代码改进为 output 正确数据的任何建议? ...

9 循环遍历c#中的json数组

我有一个json字符串, 我需要在我的C#代码中解析它。 我试过了, 但我无法循环“objectList”数组。 怎么做? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM