具有特殊字符的Oracle JSON字段名

时间:2019-02-25 16:55:47

标签: json oracle

使用Oracle存储过程,我试图解析出返回的JSON列表,效果很好。

JSON_TABLE(lv_clob,'$[*]'

我唯一遇到的问题是这个字段名称"access_No_(e.g._abc123)"本身具有(。我假设这是一个特殊字符问题,因为我因此而收到了Oracle JSON错误。

是否可以读取该列或将其转换为其他内容?我需要值“ YYr11”。

示例JSON:

{"first_name": "Jon",
"last_name": "Doe",
"street_address": null,
"city": testingcity,
"state": md,
"zip": 11234,
"access_No_(e.g._abc123)": "YYr11",
"allocation": null,
"title": null,
"title_label": null
}

我的代码行:

access_id           VARCHAR2(100)  PATH '$.access_No_(e.g._abc123)'

1 个答案:

答案 0 :(得分:1)

您可以在columns子句中用双引号括住字段名称:

access_id           VARCHAR2(100)  PATH '$."access_No_(e.g._abc123)"'

然后,字段名称中的句点(可能还有括号)不会被当作定界符。

快速演示:

select * from
JSON_TABLE('{"first_name": "Jon",
"last_name": "Doe",
"street_address": null,
"city": "testingcity",
"state": "md",
"zip": 11234,
"access_No_(e.g._abc123)": "YYr11",
"allocation": null,
"title": null,
"title_label": null
}' format json, '$'
columns
  access_id           VARCHAR2(100)  PATH '$."access_No_(e.g._abc123)"'
);

ACCESS_ID
----------------------------------------------------------------------------------------------------
YYr11