如何递归地在postgres中扁平化一个嵌套的jsonb,而我不知道它的深度和每个深度的字段?(见下面的例子)
使用postgressql查询来执行扁平化将非常有用
{
"xx": "",
"xx": "",
"form": "xxx",
"type": "",
"content_type": "xxx",
"reported_date": ,
"contact": {
"imported_date": "",
"name": "",
"phone": "",
"alternate_phone": "",
"specialization": "",
"type": "",
"reported_date": ,
"parent": {
"_id": "xxx",
"_rev": "xxx",
"parent": "",
"type": "xxx"
}
}
}
我已经搜索了堆栈溢出,但他们只考虑jsonb的,它有一个单一的深度和键是已知的
2条答案
按热度按时间zd287kbt1#
设置示例:
递归查询对在任何级别上找到的每个json对象执行
jsonb_each()
。新的键名包含从根目录开始的完整路径:如果要获得此数据的平面视图,可以使用此答案Flatten aggregated key/value pairs from a JSONB field?中描述的函数
create_jsonb_flat_view()
您需要使用扁平化的jsonb创建一个表(或视图):
现在您可以使用表中的函数:
该解决方案适用于Postgres 9.5+,因为它使用了此版本中引入的jsonb函数。如果您的服务器版本较旧,强烈建议无论如何升级Postgres以有效地使用jsonb。
s4n0splo2#
使用函数
jsonb_unnest_recursive()
质询:
结果: