数组在PostgreSQL中看起来非常简单,但我在将JSON解析为数组列类型时遇到了麻烦。
Json数据包含一个带有数组值的属性:
"problems": ["/problems/22", "/problems/31"],
该表有一个数组类型的列,如下所示:
CREATE TABLE X(
problems TEXT[],
...
);
解析通常是有效的,例如:
t.items->>'problems' --ok
返回:
["/problems/22", "/problems/31"]
然后我尝试了这个不起作用:
t.items->>'problems'::text[] --error, malformed
然后我在json中用{}替换了[],以遵守PostgreSQL数组语法:
replace(replace(t.items->>'problems', '[', '{'), ']', '}')::text[] --ok
虽然这是“可行的”,但我觉得这是一个组装。无论如何,这都是丑陋的,而且不符合PostgreSQL的优雅方式。
如何正确地将JSON解析为TEXT[]数组类型列?
2条答案
按热度按时间yftpprvb1#
你可以使用
json_arrray_elements_text
来迭代数组,然后将它聚合回一个数组:如果json值来自一个关系,你可以在子查询中这样做。
但是,如果你的JSON对象包含一个已经与
X
目标表具有相同形状的属性,有一个更简单的方法-使用json_populate_record
:(online demo)
zc0qhyus2#
如果我理解正确的话,你需要用json元素 problems 来填充列problems,如果你想要的话,那么使用
json_array_elements_text
结合ARRAY
将json数组转换为文本值列表TEXT[]
Demo here:
输出: