首页 > 解决方案 > 如何在以下 json 数组中获取 f1 的值为 1 - '[1,2,3,{"f1":1,"f2":[5,6]},4]' 使用内置函数

问题描述

我无法获取 json 数组的值

select json_extract_path('[1,2,3,{"f1":1,"f2":[5,6]},4]','f1') 

当我尝试使用这个内置函数时,它为我提供了空值。

它将输出作为空值,我希望返回值为 1。

标签: arraysjsonpostgresql

解决方案


您忘记按索引访问数组元素:

select json_extract_path('[1,2,3,{"f1":1,"f2":[5,6]},4]', '3', 'f1')
--                                                        ^^^^

或者,您可以将#>运算符与数组一起使用,或链接两个->运算符:

select '[1,2,3,{"f1":1,"f2":[5,6]},4]'::json #> '{3,f1}'
select '[1,2,3,{"f1":1,"f2":[5,6]},4]'::json -> 3 -> 'f1'

如果你不知道你正在处理一个数组,或者不知道你的对象所在的索引,你可以尝试使用自动解包数组的新 Postgres 12 json 路径:

select jsonb_path_query_first('[1,2,3,{"f1":1,"f2":[5,6]},4]', '$.f1')

推荐阅读