如何在PostgreSQL中从一个json对象数组中获取值?

问题描述 投票:0回答:2

我有以下问题 json :

[
   {
      "transition":"random_word",
      "from":"paris",
      "to":"porto",
      "date":{
         "date":"2020-05-28 11:51:25.201864",
         "timezone_type":3,
         "timezone":"Europe\/Paris"
      }
   },
   {
      "transition":"rainbow",
      "from":"porto",
      "to":"faro",
      "date":{
         "date":"2020-06-06 23:10:06.878539",
         "timezone_type":3,
         "timezone":"Europe\/Paris"
      }
   },
   {
      "transition":"banana",
      "from":"faro",
      "to":"rio_de_janeiro",
      "date":{
         "date":"2020-06-06 23:14:10.975099",
         "timezone_type":3,
         "timezone":"Europe\/Paris"
      }
   },
   {
      "transition":"hello",
      "from":"rio_de_janeiro",
      "to":"buenos_aires",
      "date":{
         "date":"2020-06-06 23:14:15.314370",
         "timezone_type":3,
         "timezone":"Europe\/Paris"
      }
   }
]

Imagine I want 回溯到最后一站 我的旅行者(最后一个json对象中的键 "to "的值。 这里:buenos_aires)和 日子 (此处 :2020-06-06 23:14:15.314370)。

我知道要用PostgreSQL来做,应该如何进行?

json postgresql key-value data-extraction
2个回答
0
投票

如果你说的 "last "是指元素在数组中显示的顺序,你可以使用 jsonb_array_length() 来获取数组的长度,然后用它来获取最后一个元素。

select (the_json_column -> jsonb_array_length(the_json_column) - 1) ->> 'to' as "to",
       (the_json_column -> jsonb_array_length(the_json_column) - 1) #>> '{date,date}' as "date"
from the_table 

这个表达式 jsonb_array_length(the_json_column) - 1 计算数组中 "最后 "元素的索引。

如果您的列被定义为 json 而非 jsonb (应该是)你需要使用等价的 json_array_length() 而不是。

© www.soinside.com 2019 - 2024. All rights reserved.