首页 文章

在Oracle 12c的JSON_VALUE中使用特殊字符的问题

提问于
浏览
1

我在Oracle 12c上运行以下代码:

DECLARE
           l_json clob;
           l_var varchar2(90);
BEGIN
           l_json := '{
                      "value>50": {
                        "id": "file",
                        "value": "55",
                        "popup": {
                          "menuitem": [{
                            "value": "New",
                            "onclick": "CreateNewDoc()"
                          },
                          {
                            "value": "Open",
                            "onclick": "OpenDoc()"
                          },
                          {
                            "value": "Close",
                            "onclick": "CloseDoc()"
                          }]
                        }
                      }
                    }';

    SELECT JSON_VALUE(l_json, '$.value>50.value') INTO l_var FROM dual;
    DBMS_OUTPUT.PUT_LINE('var: '||l_var);
END;

运行它时,我收到以下错误:

错误报告 - ORA-06550:第17行,第47列:PL / SQL:ORA-40442:JSON路径表达式语法错误ORA-06550:第17行,第1列:PL / SQL:SQL语句忽略06550. 00000 - “行%s,列%s:\ n%s“*原因:通常是PL / SQL编译错误 . *行动:

我期待结果如下:
var:55
有没有办法在JSON_VALUE中使用特殊字符?

1 回答

  • 1

    The documentation says

    对象步骤是句点( . ),有时读作“点”,后跟对象键(对象属性名称)或星号(*)通配符,它代表所有键的(值) . 密钥必须以大写或小写字母A到Z开头,并且只包含这样的字母或十进制数字(0-9),否则必须用双引号(“)括起来 .

    因此,由于您的密钥包含字符 > ,这不是列出的允许字符之一,您需要通过将JSON路径更改为:

    SELECT JSON_VALUE(l_json, '$."value>50".value') INTO l_var FROM dual;
    

相关问题