[英]how can I “unwrap” JSON arrays stored in a PostgreSQL database?
我有一个 postgresql 数据库,其中有一个 json 列,以及一些普通列。
json 列存储对象数组,如下所示:
[
{"status": "REGD", "register": "EYR", "start_date": "2008-09-01"},
{"status": "REGD", "register": "CCR", "start_date": "2008-09-01"},
{"status": "REGD", "register": "VCR", "start_date": "2008-09-01"}
]
我想在这个表上做一个SELECT
查询,分解 arrays 以便每个都是自己的行,比如:
| status | register | start_date |
--------------------------------------
| "REGD" | "EYR" | "2008-09-01" |
| "REGD" | "CCR" | "2008-09-01" |
| "REGD" | "VCR" | "2008-09-01" |
我该怎么做? 我已经尝试过运算符->>
和->
,但我没有看到像这样解开 arrays 的简单方法。
看起来一些 postgres 的json 函数会有所帮助,但我正在努力将它们应用于这种情况。
mongodb 有一个展开操作。 我想我正在寻找类似的东西(已编辑)
更新:我有一些使用json_array_elements
的东西,但我仍在努力将每个键解压缩到自己的列中。
这不太管用:
SELECT
jsonb_array_elements(registers) AS register
register->>'register' AS register_name
FROM items
试试这个,json_array_elements()。 我还包括了一个 CAST(),但这取决于你:
SELECT j->>'status'
, j->>'register'
, CAST(j->>'start_date' AS date)
FROM json_array_elements('
[
{"status": "REGD", "register": "EYR", "start_date": "2008-09-01"},
{"status": "REGD", "register": "CCR", "start_date": "2008-09-01"},
{"status": "REGD", "register": "VCR", "start_date": "2008-09-01"}
]'::json) s(j)
这里mytable
CTE 使用another_column
模拟您现有的表以进行说明。
with mytable(another_column, j) as
(
select 'other values',
'[
{"status": "REGD", "register": "EYR", "start_date": "2008-09-01"},
{"status": "REGD", "register": "CCR", "start_date": "2008-09-01"},
{"status": "REGD", "register": "VCR", "start_date": "2008-09-01"}
]'::json
)
select another_column,
jae ->> 'status' status,
jae ->> 'register' register,
jae ->> 'start_date' start_date
from mytable
cross join lateral json_array_elements(j) jae;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.