我想使用PostgreSQL将从json列提取的键值对添加到表中。
我有一个具有uid的item_table和json中具有多对的data列。初始表如下:
select jsonb_object_keys(data)
from items_table;
...
因此,某些项目/字符串可以重复,并且字段长度也可以变化。
我尝试应用文档中提到的jsonb_object_keys,但是发生了错误。
uid | items | strings
1 | item1 | string1
1 | item2 | string2
2 | item2 | string3
2 | item5 | string1
2 | item7 | string5
3 | item1 | string3
3 | item4 | string1
3 | item6 | string8
3 | item5 | string5
4 | item1 | string4
错误:函数jsonb_object_keys(字符变化)不存在提示:没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。
我想通过以下方式获取表结果,以按项目和字符串拆分,扩展uid列:
def checker(df):
df["accSync"] = df["accSync"].any()
return df
new_df = a.groupby(by="company_id").apply(checker)
如何实现上述输出?
答案 0 :(得分:0)
您应该能够提取键,然后提取值:
select key, v.j->key
from (values (1, '{"item1":"string1", "item2":"string2"}'::jsonb),
(2, '{"item2":"string3", "item5":"string1", "item7":"string5"}'::jsonb)
) v(id, j) cross join lateral
jsonb_object_keys(v.j) as key;
Here是db <>小提琴。
答案 1 :(得分:0)
您可以使用json_each_text()
方法将jsonb
类型的列轻松拆分为两个单独的列:
select uid, (js).key as items, (js).value as strings
from
(
select uid, jsonb_each_text(data) as js
from tab
) q