如何在 postgres 中显示哈希数组中的键?

How to display a key from array of hashes in postgres?

我们有一个 table 'Books':

id - int
data - text

实际上我们应该将数据保留为 jsonb 列,但是我们 table 很久以前就创建了这个并且不打算迁移。

我们可以在需要时将其转换为 jsonb。

我的问题是

在数据中我有 {"genres":[{"text":"Crime","id": "1"},{"text":"Romance","id": "5"}],"name":"Harry Potter"}

我需要一个 select 查询来显示每本书的逗号分隔的所有流派文本。

我该怎么做?

我试过了,

select data::json -> 'genres'  as genres
from books
where data::json -> 'genres'  is not NULL
limit 1;

但是这也会显示 id 并且还会显示方括号。

使用json_array_elements

select string_agg(j->>'text',',')  from books
cross join lateral json_array_elements(data::json->'genres') as j

Demo

如果您想要每本书,请添加 group by id 或任何唯一标识一本书的内容。