【问题标题】:How can i obtain the value of f1 as 1 in the following json array - '[1,2,3,{"f1":1,"f2":[5,6]},4]' using inbuilt functions如何在以下 json 数组中获取 f1 的值为 1 - '[1,2,3,{"f1":1,"f2":[5,6]},4]' 使用内置函数
【发布时间】:2019-10-14 05:34:35
【问题描述】:

我无法获取 json 数组的值

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

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

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

【问题讨论】:

  • 该值的路径是'{3, f1}',而不是'{f1}' - 您错过了数组索引?
  • Here are a few (all?) ways 达到预期效果
  • 当我试图找到它给我的值为5的数组长度时,我怎样才能获得f1的值为1
  • @Sarah 这和数组长度有什么关系?
  • 是的,这行得通..select '[1,2,3,{"f1":1,"f2":[5,6]},4]'::json #> '{ 3,f1}' 以及这个选择 json_extract_path('[1,2,3,{"f1":1,"f2":[5,6]},4]','3','f1') 。 .谢谢贝尔吉

标签: arrays json postgresql


【解决方案1】:

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

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 paths 自动解包数组:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    相关资源
    最近更新 更多