首页 > 解决方案 > 在 PLJSON oracle 中解析字符串数组

问题描述

我必须使用 ORACLE dans PLJSON 模块解析我的 JSON 中的字符串数组。我能够解析没有像 CLE、X、Y 这样的数组的数据。但是当我想获取 COLORS 或 REGROUPEMENT_COLORS 时,这不会给我任何回报。

有代码:

DECLARE
    obj json := json();
    obj_1 json := json();
    arr json_list := json_list();
    test varchar2(255);

BEGIN

    obj := json('{
  "DASHBOARD": {
    "userUid": "",
    "DATA_DASHBOARD": [
      {
        "CLE": "TESTTEST",
        "X": "",
        "Y": "",
        "COL": "",
        "ROW": "",
        "CLASSCOLOR": "",
        "COLORS": ["df","df"],
        "REGROUPEMENT_ID": "",
        "REGROUPEMENT_TEXT": "",
        "REGROUPEMENT_CLASSCOLOR": "",
        "REGROUPEMENT_X": "",
        "REGROUPEMENT_Y": "",
        "REGROUPEMENT_COL": "",
        "REGROUPEMENT_ROW": "",
        "REGROUPEMENT_COLORS": ["d","df"]
      }
    ]
  }
}');


    obj_1 :=json(obj.get('DASHBOARD'));


    arr := json_list(obj_1.get('DATA_DASHBOARD'));

     test := json_ext.get_string(json(arr.get(1)), 'REGROUPEMENT_COLORS');

    DBMS(test);


END;

谢谢 !

标签: jsonoracleplsqlpljson

解决方案


REGROUPEMENT_COLORS是一个数组,而不是一个字符串,所以json_ext.get_string()不返回任何东西。如果你想要一个字符串,那么获取REGROUPEMENT_COLORS[1]REGROUPEMENT_COLORS[2];如果你想要数组然后使用json_ext.get_json_list而不是json_ext.get_string.

要输出字符串,请使用DBMS_OUTPUT.PUT_LINEnot DBMS

如果您正在使用,json_ext那么您可以使用完整路径。

PL/SQL

DECLARE
  obj pljson := pljson(
    '{
      "DASHBOARD": {
        "userUid": "",
        "DATA_DASHBOARD": [
          {
            "CLE": "TESTTEST",
            "X": "",
            "Y": "",
            "COL": "",
            "ROW": "",
            "CLASSCOLOR": "",
            "COLORS": ["df","df"],
            "REGROUPEMENT_ID": "",
            "REGROUPEMENT_TEXT": "",
            "REGROUPEMENT_CLASSCOLOR": "",
            "REGROUPEMENT_X": "",
            "REGROUPEMENT_Y": "",
            "REGROUPEMENT_COL": "",
            "REGROUPEMENT_ROW": "",
            "REGROUPEMENT_COLORS": ["d","df"]
          }
        ]
      }
    }'
  );
  test varchar2(255);
  arr  pljson_list;
BEGIN
  test := pljson_ext.get_string( obj, 'DASHBOARD.DATA_DASHBOARD[1].REGROUPEMENT_COLORS[1]');
  DBMS_OUTPUT.PUT_LINE(test);
  arr := pljson_ext.get_json_list( obj, 'DASHBOARD.DATA_DASHBOARD[1].REGROUPEMENT_COLORS');
  arr.print;
  FOR i IN 1 .. arr.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE( arr.get_string(i) );
  END LOOP;
END;
/

(注意:对象/包的pl前缀为 db<>fiddle 不允许创建同义词;如果您的实现创建了适当的同义词,您应该能够删除这些前缀。)

输出

d
[“d”,“df”]
d
df

db<>在这里摆弄


推荐阅读