假设我将以下内容存储在Oracle数据库的JSON列中:
services
假设此列在名为{
"key-with-hyphens": "value"
}
的表中被称为json_column
,那么我尝试选择my_table
键的值,如下所示:
"key-with-hyphens"
这给了我以下错误:
select json_column.key-with-hyphens from my_table;
在Oracle中从JSON列中选择带连字符的键时,是否需要使用某种特殊语法?
答案 0 :(得分:0)
事实证明,有几种方法可以做到这一点。
方法1:
按照我尝试的原始方式进行操作,这个选择有几个问题:
select json_column.key-with-hyphens from my_table;
首先,除非您对表进行别名,否则JSON列中的键选择将不起作用:
select mt.json_column.key-with-hyphens from my_table mt;
但是,这仍然无法解决带连字符的问题。要在此语法中允许使用带连字符的键,您需要将键的名称用引号括起来:
select mt.json_column."key-with-hyphens" from my_table mt;
上述查询将按预期工作。
方法2:
另一种方法是在没有别名表的情况下使用select子句中的json_value
函数。您将JSON列作为第一个参数传递,并将要选择的键的完整路径作为第二个参数,使用$
作为存储在列中的JSON对象的根上下文。以下查询也应按预期工作:
select json_value(json_column, '$."key-with-hyphens"') from my_table;