查询 json 只有字符串的数组 oracle

query json array having only strings oracle

下面是 json 存储在名为“Sample”的 table 中,列名为“argument”。我想获取所有在指定参数中具有特定值的记录。我可以查询参数名称但不能查询特定值,因为它是一个字符串数组。 (请找到我的钥匙里面有 .)

{
 "arguments":{
    "app.argument1.appId":["123", "456"],
    "app.argument2.testId":["546", "567"]
 }
}

这给了我所有具有特定参数的记录。

 select * from sample where json_exists(argument, '$.arguments."app.argument1.appId"');

但我需要匹配参数值。我在下面尝试但出现 JSON 表达式错误。

select * from sample where json_exists(argument, '$.arguments."app.argument1.appId[*]"?(@ == "123"));

请帮忙。提前致谢。

你把引号放错地方了;你想要在数组的方括号之前而不是之后的双引号:

select *
from   sample
where  json_exists(
         argument,
         '$.arguments."app.argument1.appId"[*]?(@ == "123")'
       );

其中,对于示例数据:

CREATE TABLE sample ( argument CLOB CHECK ( argument IS JSON ) );

INSERT INTO sample ( argument ) VALUES ( '{
 "arguments":{
    "app.argument1.appId":["123", "456"],
    "app.argument2.testId":["546", "567"]
 }
}');

输出:

| ARGUMENT                                                                                                                 |
| :----------------------------------------------------------------------------------------------------------------------- |
| {<br> "arguments":{<br>    "app.argument1.appId":["123", "456"],<br>    "app.argument2.testId":["546", "567"]<br> }<br>} |

db<>fiddle here


Do you know a way to do this in 12.1?

您还可以将 EXISTS 与相关的 JSON_TABLE (which is available from Oracle 12c Release 1 (12.1.0.2)) 结合使用。:

select *
from   sample
where  EXISTS (
  SELECT 1
  FROM   JSON_TABLE(
           argument,
           '$.arguments."app.argument1.appId"[*]'
           COLUMNS (
             value VARCHAR2(100) PATH '$'
           )
         )
  WHERE  value = '123'
);

db<>fiddle here