使用 PostgreSQL 分析和格式化 JSON
Analysing and formatting JSON using PostgreSQL
我有一个名为 api_details 的 table,我将下面的 JSON 值转储到 JSON 列 raw_data 中。
现在我需要根据这个 JSON 字符串制作一份报告, 预期输出 如下所示,
action_name. sent_timestamp Sent. Delivered
campaign_2475 1600416865.928737 - 1601788183.440805. 7504. 7483
campaign_d_1084_SUN15_ex 1604220248.153903 - 1604222469.087918. 63095. 62961
下面是示例JSON OUTPUT
{
"header": [
"#0 action_name",
"#1 sent_timestamp",
"#0 Sent",
"#1 Delivered"
],
"name": "campaign - lifetime",
"rows": [
[
"campaign_2475",
"1600416865.928737 - 1601788183.440805",
7504,
7483
],
[
"campaign_d_1084_SUN15_ex",
"1604220248.153903 - 1604222469.087918",
63095,
62961
],
[
"campaign_SUN15",
"1604222469.148829 - 1604411016.029794",
63303,
63211
]
],
"success": true
}
我试过如下所示,但没有得到 results.I 可以使用 python 通过遍历行列表中的所有元素来完成。
但是在 PostgreSQL(版本 11)中有一个简单的解决方案吗?
SELECT raw_data->'rows'->0
FROM api_details
您可以使用JSONB_ARRAY_ELEMENTS()
函数,例如
SELECT (j.value)->>0 AS action_name,
(j.value)->>1 AS sent_timestamp,
(j.value)->>2 AS Sent,
(j.value)->>3 AS Delivered
FROM api_details
CROSS JOIN JSONB_ARRAY_ELEMENTS(raw_data->'rows') AS j
P.S。在这种情况下,raw_data
的数据类型假定为 JSONB
,否则函数 raw_data->'rows'
中的参数应替换为 raw_data::JSONB->'rows'
以执行显式类型转换。
我有一个名为 api_details 的 table,我将下面的 JSON 值转储到 JSON 列 raw_data 中。 现在我需要根据这个 JSON 字符串制作一份报告, 预期输出 如下所示,
action_name. sent_timestamp Sent. Delivered
campaign_2475 1600416865.928737 - 1601788183.440805. 7504. 7483
campaign_d_1084_SUN15_ex 1604220248.153903 - 1604222469.087918. 63095. 62961
下面是示例JSON OUTPUT
{
"header": [
"#0 action_name",
"#1 sent_timestamp",
"#0 Sent",
"#1 Delivered"
],
"name": "campaign - lifetime",
"rows": [
[
"campaign_2475",
"1600416865.928737 - 1601788183.440805",
7504,
7483
],
[
"campaign_d_1084_SUN15_ex",
"1604220248.153903 - 1604222469.087918",
63095,
62961
],
[
"campaign_SUN15",
"1604222469.148829 - 1604411016.029794",
63303,
63211
]
],
"success": true
}
我试过如下所示,但没有得到 results.I 可以使用 python 通过遍历行列表中的所有元素来完成。
但是在 PostgreSQL(版本 11)中有一个简单的解决方案吗?
SELECT raw_data->'rows'->0
FROM api_details
您可以使用JSONB_ARRAY_ELEMENTS()
函数,例如
SELECT (j.value)->>0 AS action_name,
(j.value)->>1 AS sent_timestamp,
(j.value)->>2 AS Sent,
(j.value)->>3 AS Delivered
FROM api_details
CROSS JOIN JSONB_ARRAY_ELEMENTS(raw_data->'rows') AS j
P.S。在这种情况下,raw_data
的数据类型假定为 JSONB
,否则函数 raw_data->'rows'
中的参数应替换为 raw_data::JSONB->'rows'
以执行显式类型转换。