首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres -如何从数组中的每个json上重复的字段中获取所有值?

Postgres -如何从数组中的每个json上重复的字段中获取所有值?
EN

Database Administration用户
提问于 2016-10-06 15:36:45
回答 1查看 10.5K关注 0票数 5

我在PostgreSQL 9.5的一些网站上以jsonb格式存储大量的json。其中一个字段是具有相同信息的Jsons数组。下面是一个例子。

代码语言:javascript
复制
[
  {
    "text": "JIMIN",
    "indices": [
      16,
      22
    ]
  },
  {
    "text": "PUMA",
    "indices": [
      23,
      28
    ]
  }
]

我想检索所有的text值,也就是说,我想要进行一个查询,在这个示例中给出JIMINPUMA。我找不到一种方法可以通过共用运算符(如#>>)来完成这一任务。有办法做到这一点吗?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2016-10-10 12:49:19

您没有提供任何代码,所以我将创建一个包含一行和一些查询的示例表,以提取所需的信息。

代码语言:javascript
复制
CREATE TABLE test (myfield jsonb);

负载数据:

代码语言:javascript
复制
INSERT INTO test (myfield) VALUES ('
[
  {
    "text": "JIMIN",
    "indices": [
      16,
      22
    ]
  },
  {
    "text": "PUMA",
    "indices": [
      23,
      28
    ]
  }
]
'::jsonb);

要提取特定项,让我们假设第二个数组项的text字段:

代码语言:javascript
复制
SELECT myfield#>>'{1,text}' AS text FROM test;

这将产生以下结果:

代码语言:javascript
复制
  text 
 ------
  PUMA
 (1 row)

为了提取数组中的所有text字段,可能的解决方案是:

代码语言:javascript
复制
SELECT (jsonb_array_elements(myfield)::jsonb)->'text' AS text FROM test;

产出如下:

代码语言:javascript
复制
  text   
---------
 "JIMIN"
 "PUMA"
(2 rows)

显然,这适用于许多记录:每个数组项将被移植到每个数组的一行。此查询与PostgreSQL 9.5兼容。查看官方文档,以创建更高效或更通用的查询( https://www.postgresql.org/docs/9.5/static/functions-json.html )。

票数 6
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/151601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档