首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Oracles JSON数组中选择特定元素JSON类型

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

Stack Overflow用户
提问于 2016-09-02 02:15:17
回答 1查看 3.5K关注 0票数 1

我有一个CLOB列,包含以下数据(为本问题的目的而简化)

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

代码语言:javascript
运行
复制
SELECT
  json_query(
                 '{"notUsed":[],"stock":[{"name":"eggs","value":"in stock"}, {"name":"milk","value":"out of stock"}]}',
                 '$.stock[?(@.name=="eggs")]' )
FROM dual;

我也尝试过使用点符号,但是没有找到一个例子,它涵盖了在数组的属性中添加where子句。

代码语言:javascript
运行
复制
select
  myTable.id,
  myTable.JSON_COLUMN.stock    -- how to get array element here?
from MY_TABLE myTable
where j.id = 46

版本:

代码语言:javascript
运行
复制
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"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-02 06:42:28

JSON_path_expression只支持一些基本语法,根据手册的说法

JSON_path_expression::=

object_step::=

array_step::=

另一种方法是使用JSON_TABLE将JSON转换为关系表,然后对列进行项目和筛选。

代码语言:javascript
运行
复制
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'

结果:

代码语言:javascript
运行
复制
VALUE
-----
in stock
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39283363

复制
相关文章

相似问题

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