首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何检查oracle sql中的大型json对象中是否存在json路径/值项?

如何检查oracle sql中的大型json对象中是否存在json路径/值项?
EN

Stack Overflow用户
提问于 2022-07-13 19:08:42
回答 1查看 241关注 0票数 1

假设json对象是这样的:

代码语言:javascript
代码运行次数:0
运行
复制
{
    "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)。

EN

回答 1

Stack Overflow用户

发布于 2022-07-14 06:09:29

至少在Oracle中(我不知道其他数据库产品--您提到Postgre,并说它具有Oracle不具备的功能),像您这样的比较筛选器只试图应用于标量值,而不是嵌套对象。

如果我明白你想做什么,那么在甲骨文中,你会这样做

代码语言:javascript
代码运行次数:0
运行
复制
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”的对象值可能不是,与指定的对象相同,后者有,确切地说是三个键,没有更多了。这对你有用吗?只有你知道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72971441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档