Sql 当密钥的名称中有点时(在oracle中),如何访问JSON值?

Sql 当密钥的名称中有点时(在oracle中),如何访问JSON值?,sql,json,oracle,oracle12c,Sql,Json,Oracle,Oracle12c,如何获取“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 solut

如何获取“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
一个选项是使用DB版本12.1.0.2中引入的功能:

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

将键放在双引号中。所以

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

json_值(js,“$”b.c“)
。太好了。非常感谢。请把它寄出去,这样我就可以接受了
+-----------------------+-----------+
|          JS           | B_C_VALUE |
+-----------------------+-----------+
| {"a": "1","b.c": "2"} |         2 |
+-----------------------+-----------+