【发布时间】:2021-09-16 02:54:29
【问题描述】:
我的 Oracle 数据库中有一些包含 json 的列,为了在查询中提取它的数据,我使用 REGEXP_SUBSTR。
在以下示例中,value 是表 DOSSIER 中包含 json 的列。正则表达式提取该json中属性client.reference的值
SELECT REGEXP_SUBSTR(value, '"client"(.*?)"reference":"([^"]+)"', 1, 1, NULL, 2) FROM DOSSIER;
如果 json 看起来像这样:
[...],
"client": {
"someproperty":"123",
"someobject": {
[...]
},
"reference":"ABCD",
"someotherproperty":"456"
},
[...]
SQL 查询将返回ABDC。
我的问题是某些 json 有多个“客户端”实例,例如:
[...],
"contract": {
"client":"Name of the client",
"supplier": {
"reference":"EFGH"
}
},
[...],
"client": {
"someproperty":"123",
"someobject": {
[...]
},
"reference":"ABCD",
"someotherproperty":"456"
},
[...]
您遇到了问题,现在 SQL 查询将返回 EFGH,这是供应商的参考。
如何确保“引用”包含在 json 对象“客户端”中?
编辑:我在 Oracle 11g 上,所以我不能使用 JSON API,我想避免使用第三方包
【问题讨论】:
-
你应该使用 Oracle 的 JSON API 而不是纯正则表达式。
-
@TimBiegeleisen 是的,我忘了在问题中添加这个:我在 Oracle 11g 上,所以很遗憾没有可用的 json API
标签: json regex oracle oracle11g regexp-substr