postgresql 在Postgre中将类似字典的字符串转换为表格

zphenhs4  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(258)

我有一个类似于字典的字符串:
{100:{1:500000,2:600000},200:{1:700000,2:800000},300:{1:900000,2:100000
请注意,路径级别始终是固定的,但键值对的数量不是固定的。
我想把它转换成这样的表:

column 1 | column 2 | column 3
--------------------------------
100      | 1        | 500000
100      | 2        | 600000
200      | 1        | 700000
200      | 2        | 800000
300      | 1        | 900000
300      | 2        | 1000000

我试着使用正则表达式(select regexp_split_to_table(string, '[{}:, ]+') from ...)并获得数字行,但将这些行转换为表产生了另一个需要解决的问题。

a64a0gku

a64a0gku1#

我们可以使用REGEXP_REPLACE将类似字典的字符串转换为有效的JSON,然后在两个级别上应用jsonb_each以获得预期的输出:

SELECT n1.key as column_1, n2.key as column_2, n2.value as column_3
FROM mytable t, jsonb_each(REGEXP_REPLACE(jsoncol, '([0-9]+):', '"\1":', 'g')::jsonb) n1,
                jsonb_each(n1.value) n2

结果:

column_1    column_2    column_3
100         1           500000
100         2           600000
200         1           700000
200         2           800000
300         1           900000
300         2           1000000

Demo here

相关问题