如何从Oracles JSON CLOB类型的JSON数组中选择特定元素

吉米

我有一个CLOB列,其中包含以下数据(出于本问题的目的而进行了简化)

{
    "notUsed": [],
    "stock": [
        {
            "name": "eggs",
            "value": "in stock"
        },
        {
            "name": "milk",
            "value": "out of stock"
        }
    ]
}

我想避免不得不选择整个对象并以编程方式进行解析以获取所需的数据。理想情况下,我想利用Oracle JSON路径功能来做到这一点。

我想去"value"哪里"name" = "eggs"

我已经尝试了以下方法,但是得到了[99999][40442] ORA-40442: JSON path expression syntax error我已经运行了上面的示例JSON和通过评估器的JSON路径,它返回了所需的结果,这使我认为Oracle具有自己的JSONPath解释

SELECT
  json_query(
                 '{"notUsed":[],"stock":[{"name":"eggs","value":"in stock"}, {"name":"milk","value":"out of stock"}]}',
                 '$.stock[?(@.name=="eggs")]' )
FROM dual;

我也尝试过使用Dot Notation,但是找不到能够覆盖在数组属性中添加where子句的示例。

select
  myTable.id,
  myTable.JSON_COLUMN.stock    -- how to get array element here?
from MY_TABLE myTable
where j.id = 46

版本:

SELECT * FROM V$VERSION

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production
"CORE   12.1.0.2.0  Production"
乔恩·海勒

根据手册,JSON_path_expression仅支持一些基本语法

JSON_path_expression :: =

在此处输入图片说明

object_step :: =

在此处输入图片说明

array_step :: =

在此处输入图片说明

另一种方法是使用JSON_TABLE将JSON转换为关系表,然后投影和过滤列。

select value
from json_table(
    '{
        "notUsed": [],
        "stock": [
            {
                "name": "eggs",
                "value": "in stock"
            },
            {
                "name": "milk",
                "value": "out of stock"
            }
        ]
    }',
    '$.stock[*]'
    columns
    (
        name varchar2(100 char) path '$.name',
        value varchar2(100 char) path '$.value'
    )
)
where name = 'eggs'

结果:

VALUE
-----
in stock

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在python中选择特定的json元素

如何使用python从json中选择元素

如何从JSON对象中选择特定条目

我如何从 json 中选择特定值?

如何在JSON中选择特定对象

如何将json数组元素映射到下拉列表中选择的选项?

如何从雪花数据库的Varchar“ JSON数组”中选择元素?

如何使用jq从JSON数组中选择具有特定ID的对象?

如何从 JSON - Angular 2 中选择一个元素

如何从json对象数组中选择单个字段?

如何在postgres中选择json数组的大小?

如何从json的嵌套数组中选择项目?

如何从 json 响应 javascript 中选择特定数据

如何从 json 数组中读取特定的 json 对象元素?

在JSON / AJAX调用之后,如何在页面中选择特定按钮(从多个按钮中选择)?

如何在Postgres中选择一列json对象,以便返回的行是数组的json数组?

如何使用Oracle 12c获取存储为CLOB的JSON数组中的元素数?

如何通过某种条件从mysql的JSON数组字段中选择JSON对象

如何从MySQL中选择colmun是文本类型和数据是json的类型

从JSON数组中选择一个特定的值

如何从对象数组中获取特定的JSON元素(jQuery)

如何从我的表 Postgres 中选择 json

如何显示从json对象中选择的数据

如何从JSON值中选择数据

如何从 React 的 JSON 响应中选择数据?

如何选择特定的 JSON 对象?

如何使用JSON的特定元素

如何在 Swift 4 中选择要反序列化的 JSON 数组

我如何在React Native中从json中选择特定值?