我有一个名为"points"的表格和列"node_id"、"tags"等。
如何从jsonb元素"tags"中删除所有值为null的元素?
我想获取这个表单:
我尝试使用这个示例代码,它可以工作,但不够智能。我使用了两次jsonb_strip_nulls并进行了替换和文本与jsonb之间的转换。有没有其他更聪明的方法来获得相同的结果?
如何从jsonb元素"tags"中删除所有值为null的元素?
{
"addInfo": {
"payment": {
"payment:dkv": null,
"payment:uta": null,
},
"fueltype": {
"fuel:diesel": "yes",
"fuel:octane_91": null,
"fuel:octane_95": "yes",
"fuel:octane_98": null
},
"operating": {
"name": "Raiffeisen",
"brand": "Raiffeisen",
"operator": null,
"opening_hours": "24/7"
}
}
}
我想获取这个表单:
{
"addInfo": {
"payment": {},
"fueltype": {
"fuel:diesel": "yes",
"fuel:octane_95": "yes"
},
"operating": {
"name": "Raiffeisen",
"brand": "Raiffeisen",
"opening_hours": "24/7"
}
}
}
我尝试使用这个示例代码,它可以工作,但不够智能。我使用了两次jsonb_strip_nulls并进行了替换和文本与jsonb之间的转换。有没有其他更聪明的方法来获得相同的结果?
SELECT node_id,
nullif(jsonb_strip_nulls(replace("addInfo" ::text, '{}', 'null')
::jsonb) ::text,
'{}') ::jsonb
FROM (SELECT jsonb_strip_nulls(
jsonb_build_object('addInfo',
jsonb_build_object('EXAMPLE....'))) "addInfo"
FROM points p
WHERE p.tags notnull
AND p.tags - >> 'amenity' = 'fuel') foo;
如何恢复原始排序:
1 operating
2 payment
3 fueltype