我有以下 JSON,它作为程序中的参数出现。我想从 JSON 访问discountid 和discountname 属性。由于 243431 是数字标签,我无法访问其中的任何属性。
"discountDetail": {
"243431": {
"discountId": "243431",
"discountName": "Standard Service Discount - USD",
"discountDescription": "Standard - Standard Service Discount - USD",
"discountGroup": "Standard",
"modifierLineTypeCode": "DIS"
}
}
CREATE OR REPLACE PROCEDURE parse_json (p_json CLOB)
IS
BEGIN
for i in (SELECT *
FROM JSON_TABLE (
p_json FORMAT JSON,'$'
COLUMNS (
NESTED PATH '$.responseHeader.discountDetail.243431[*]'
COLUMNS (discountId VARCHAR2 PATH '$.discountId',
discountName VARCHAR2 PATH '$.discountName') loop
DBMS_OUTPUT.put_line ('discountId=' || i.discountId);
DBMS_OUTPUT.put_line ('discountName=' || i.discountName);
end loop;
END;
访问 243431 标签时出现以下错误
[Error] Compilation (70: 15): PL/SQL: ORA-40597: JSON path expression syntax error ('$.responseHeader.discountDetail.243431[*]')
JZN-00209: Unexpected characters after end of path
at position 38
有什么替代方案吗?
在标识符周围使用双引号(并且不要忘记右括号
)
):
CREATE OR REPLACE PROCEDURE parse_json (p_json CLOB)
IS
BEGIN
for i in (SELECT *
FROM JSON_TABLE (
p_json FORMAT JSON,'$'
COLUMNS (
NESTED PATH '$.responseHeader.discountDetail."243431"[*]'
COLUMNS (discountId VARCHAR2 PATH '$.discountId',
discountName VARCHAR2 PATH '$.discountName'
)
)
)
)
loop
DBMS_OUTPUT.put_line ('discountId=' || i.discountId);
DBMS_OUTPUT.put_line ('discountName=' || i.discountName);
end loop;
END;
/
然后:
BEGIN
DBMS_OUTPUT.ENABLE();
parse_json('{"responseHeader":{"discountDetail": {
"243431": {
"discountId": "243431",
"discountName": "Standard Service Discount - USD",
"discountDescription": "Standard - Standard Service Discount - USD",
"discountGroup": "Standard",
"modifierLineTypeCode": "DIS"
}
}}}');
END;
/
输出:
discountId=243431
discountName=Standard Service Discount - USD