当键的名称中有点时(在 oracle 中),我如何访问 JSON 值?
Posted
技术标签:
【中文标题】当键的名称中有点时(在 oracle 中),我如何访问 JSON 值?【英文标题】:How I can access a JSON value when the key has dot inside its name (in oracle)? 【发布时间】:2020-08-11 15:37:39 【问题描述】:如何获得“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"')
.
太棒了。谢谢你。请把它贴出来让我接受它
【参考方案1】:
将密钥放在双引号中。所以,
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 | +-----------------------+-----------+
【讨论】:
【参考方案2】:一种选择是使用 DB 版本 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
Demo
【讨论】:
以上是关于当键的名称中有点时(在 oracle 中),我如何访问 JSON 值?的主要内容,如果未能解决你的问题,请参考以下文章
当键的数量少于每个键的值的数量时,PySpark reduceByKey 会继续失败
关于map函数的方法参考,当键的类型为String时编译错误