本文介紹了如何從Oracle JSON CLOB類型的JSON數(shù)組中選擇特定元素的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我有一個(gè)CLOB專欄,其中包含以下數(shù)據(jù)(為此問題而簡化)
{
"notUsed": [],
"stock": [
{
"name": "eggs",
"value": "in stock"
},
{
"name": "milk",
"value": "out of stock"
}
]
}
我希望避免選擇整個(gè)對象并通過編程進(jìn)行解析來獲得我想要的數(shù)據(jù)。理想情況下,我希望使用Oracle JSON path功能來完成此操作。
我想獲取"value"
,其中"name" = "eggs"
我嘗試了以下方法,但得到了[99999][40442] ORA-40442: JSON path expression syntax error
。我通過一個(gè)evaluator運(yùn)行了上面的示例JSON和JSON路徑,它返回了所需的結(jié)果,這讓我認(rèn)為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子句添加到數(shù)組屬性的示例。
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僅支持一些基本語法,the manual:
JSON_path_expression::=
Object_Step::=
ARRAY_STEP::=
另一種方法是使用JSON_TABLE將JSON轉(zhuǎn)換為關(guān)系表,然后投影和篩選列。
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'
結(jié)果:
VALUE
-----
in stock
這篇關(guān)于如何從Oracle JSON CLOB類型的JSON數(shù)組中選擇特定元素的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,