我在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中使用特殊字符?
答案 0 :(得分:1)
对象步骤是句点(
.
),有时读作“点”,后跟对象键(对象属性名称)或星号(*
)通配符,代表(所有键的值。密钥必须以大写或小写字母A到Z开头,并且只包含这样的字母或十进制数字(0-9),否则必须用双引号("
)括起来。
因为您的密钥包含字符>
,而不是列出的允许字符之一,您需要通过将JSON路径更改为:
SELECT JSON_VALUE(l_json, '$."value>50".value') INTO l_var FROM dual;