我有以下 JSON 数据:
{"GrossORNet":"Net","Term":"Monthly","Tier":{"All":{"1":{"Max":"100000","Min":"1","Rate":"15","StartDate":"2021-02-01","EndDate":"2021-02-01"}}}}
以下查询:
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');
我可以获得 Tier 的值,但我需要“All”的输出,例如提取的 JSON 的第一个键名称。除了使用正则表达式之外,还有其他选择吗?
这里可能的技巧之一是将 json 转换为地图并像使用地图一样使用它:
SELECT
map_keys(cast(json_extract(
'{"GrossORNet":"Net","Term":"Monthly","Tier":{"All":{"1":{"Max":"100000","Min":"1","Rate":"15","StartDate":"2021-02-01","EndDate":"2021-02-01"}}}}'
, '$.Tier.All'
) as map(varchar, json)))[1];
输出:
_col0
-------
1
(1 row)