如何解决当键的名称中包含点号时在oracle中,如何访问JSON值?
如何获取“ b.c”键的价值?我需要以一种有效的方式提取该2。 我只是空了
select js,json_value(js,'$.a') a_value,-- work correctly and give 1
json_value(js,'$.b.c') b_c_value,-- doesn't work and give null
json_query(js,'$.b.c') b_c_query -- I saw this solution somwhere but this also give null
from (select '{"a": "1","b.c": "2"}' js from dual) -- sample JSON
解决方法
将密钥放在双引号中。所以,
json_value(js,'$."b.c"') b_c_value
完整示例:
select js,json_value(js,'$."b.c"') b_c_value
from (select '{"a": "1","b.c": "2"}' js from dual) -- sample JSON
,+-----------------------+-----------+ | JS | B_C_VALUE | +-----------------------+-----------+ | {"a": "1","b.c": "2"} | 2 | +-----------------------+-----------+
一种选择是使用数据库版本12.1.0.2中引入的JSON_TABLE()
函数:
WITH t(js) AS
(
SELECT '{"a": "1","b.c": "2"}' FROM dual
)
SELECT a_value,b_c_value
FROM t
CROSS JOIN JSON_TABLE(js,'$'
COLUMNS (
a_value INT PATH '$.a',b_c_value INT PATH '$."b.c"' ) )
A_VALUE B_C_VALUE
------- ---------
1 2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。