我有以下json
{"GrossORNet":"Net","Term":"Monthly","Tier":{"All":{"1":{"Max":"100000","Min":"1","Rate":"15","StartDate":"2021-02-01","EndDate":"2021-02-01"}}}}
通过以下查询我可以获得 Tier 值
select json_extract(
'{"GrossORNet":"Net","Term":"Monthly","Tier":{"All":{"1":{"Max":"100000","Min":"1","Rate":"15","StartDate":"2021-02-01","EndDate":"2021-02-01"}}}}'
, '$.Tier'
)
类似的方式我试图获取最大值和最小值,但它不起作用,它返回空白
select json_extract(
'{"GrossORNet":"Net","Term":"Monthly","Tier":{"All":{"1":{"Max":"100000","Min":"1","Rate":"15","StartDate":"2021-02-01","EndDate":"2021-02-01"}}}}'
, '$.Max'
)
所有和1都是动态值,可能会不同
我做错了什么
谢谢,
'$.Max'
是一个 JSON 路径 (RFC) 表达式。它代表 JSON 中的路径,在本例中,它将在根对象中查找 Max
属性,该属性显然不存在。
Presto/Trino 中的根节点标识符$指的是查询的根节点 论证,即整个论证。
json_extract
对 JSON 路径表达式的支持非常少。这里有两个主要选项(如我之前的答案中所述) - 投射到地图或使用json_query
。例如,如果您只有一把钥匙:
SELECT
JSON_QUERY(
'{"GrossORNet":"Net","Term":"Monthly","Tier":{"All":{"1":{"Max":"100000","Min":"1","Rate":"15","StartDate":"2021-02-01","EndDate":"2021-02-01"}}}}'
, 'lax $.Tier.*.*.Max'
);
输出
_col0
----------
"100000"
(1 row)
对于多个值,可以使用
'lax $.Tier.*.*.Max' with array wrapper
。