假设json对象是这样的:
{
"title":"<title goes here>",
"version":"1.0.0",
"name":"<name goes here>",
"features": {
"feature-id1":{
"id":"090ccd9c-8930-4aa9-9aa3-f9c8e6747a27",
"name":"feature1",
"version":"1.0.0"
}
"feature-id2":{
"id":"932twe8e-2184-4er9-5qw3-g4e9w9821w71",
"name":"feature2",
"version":"1.0.0"
}
...
}
}
我想检查上面的json数据中是否存在json路径/值条目(或)嵌套的json对象。
我试过了
json_exists(json_column,'$.features?(@."feature-id1" == "{"id": "090ccd9c-8930-4aa9-9aa3-f9c8e6747a27","name":"feature1","version":"1.0.0"}")');
但是这给了我一个错误"JZN-00229:在偏执表达式中缺少括号“。我们不能使用json_exists()检查带有值的json对象/数组吗?
在Postgresql中,这可以通过使用'@>‘操作符来实现:
json_data->'features'->'feature-id1' @> 'provide the json value'
是否有方法在Oracle SQL中实现相同的功能?我使用Oracle 19c和最新的补丁程序(19.15)。
发布于 2022-07-14 06:09:29
至少在Oracle中(我不知道其他数据库产品--您提到Postgre,并说它具有Oracle不具备的功能),像您这样的比较筛选器只试图应用于标量值,而不是嵌套对象。
如果我明白你想做什么,那么在甲骨文中,你会这样做
json_exists(json_column,'$."features"."feature-id1"?(
@."id" == "090ccd9c-8930-4aa9-9aa3-f9c8e6747a27"
&& @."name" == "feature1"
&& @."version" == "1.0.0"
)'
)
虽然这并不完全等同于你想要做的事情。也就是说,这个过滤器只确保一个键"feature-id1“的存在,它的值是一个嵌套的对象,它至少具有----三个键"id”、"name“和"version",具有指定的值--但是也可能有其他键。因此,在您的尝试中,“FeatureId1”的对象值可能不是,与指定的对象相同,后者有,确切地说是三个键,没有更多了。这对你有用吗?只有你知道。
https://stackoverflow.com/questions/72971441
复制相似问题