首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从PostgreSQL中的jsonb数组中获取一个元素

从PostgreSQL中的jsonb数组中获取一个元素
EN

Stack Overflow用户
提问于 2018-12-05 02:26:33
回答 1查看 15.4K关注 0票数 5

我的PostgreSQL数据库中有以下模式:

代码语言:javascript
复制
CREATE TABLE survey_results (
    id integer NOT NULL
);

CREATE TABLE slide_results (
    id integer NOT NULL,
    survey_result_id integer,
    buttons jsonb DEFAULT '[]'::jsonb
);

INSERT INTO survey_results (id)
  VALUES (1);

INSERT INTO slide_results (id, survey_result_id, buttons)
  VALUES (1, 1, '[{"text": "Not at all"}, {"text": "Yes"}]');

INSERT INTO slide_results (id, survey_result_id, buttons)
  VALUES (2, 1, '[{"text": "No"}, {"text": "Yes"}]');

和以下查询:

代码语言:javascript
复制
WITH data AS ( 
  select 
    sr.id ,
    jsonb_agg(row_to_json(slr)) AS json_row
  from slide_results slr
  INNER JOIN survey_results sr ON sr.id = slr.survey_result_id
  group by sr.id
)

SELECT id, json_row->0->>'buttons' from data;

它返回:

代码语言:javascript
复制
| id  | ?column?                                  |
| --- | ----------------------------------------- |
| 1   | [{"text": "Not at all"}, {"text": "Yes"}] |

我希望这个查询只返回按钮数组的第一个元素。我尝试了这样的东西:

代码语言:javascript
复制
WITH data AS ( 
  select 
    sr.id ,
    jsonb_agg(row_to_json(slr)) AS json_row
  from slide_results slr
  INNER JOIN survey_results sr ON sr.id = slr.survey_result_id
  group by sr.id
)

SELECT id, json_row->0->>'buttons'->>1 from data;

但这将返回错误:

代码语言:javascript
复制
Query Error: error: operator does not exist: text ->> integer

我怎么才能修复它呢?

https://www.db-fiddle.com/f/gP761psywgmovfdTT7DjP4/1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-05 02:44:43

代码语言:javascript
复制
SELECT id, json_row->0->'buttons'->>0 from data;

您将'buttons'引用为文本,而不是对象。

另外,数组的索引是从0开始的,因此指向1将产生第二个元素。

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

https://stackoverflow.com/questions/53619282

复制
相关文章

相似问题

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