我使用::text[]来转换JSON列中的数组,如下面的示例所示:
假设sometable有一个名为'object'的JSON列,其结构如下:
{ "properties": ["string", "someotherstring"] }
我这样查询db:
SELECT * FROM db.sometable
WHERE 'string' = ANY (ARRAY[object -> 'properties']::text[]);
我期望ARRAY[object -> 'properties']::text[]
返回某种字符串列表,如下所示:
{"string", "someotherstring"}
...但是,经过一些调试,我意识到它返回了一些wierd s***,如下所示:
{"[\"string\", \"someotherstring\"]"}
基本上,它将整个数组视为一个字符串!会是什么原因呢?
PS:我知道我应该使用其他函数或过滤器,但我正在处理的真实的查询是高度动态的,比我提供的示例更复杂。::text[]似乎是我唯一的选择
提前感谢您的帮助!
我期望::text[]将JSON数组转换为字符串列表,但实际上它将整个数组视为字符串。
3条答案
按热度按时间wmvff8tz1#
没有理由将json转换为Postgres数组。你需要一个合适的接线员。
在db<>fiddle.中测试
阅读JSON函数和运算符in the documentation.
dwbf0jvd2#
结合使用
json_array_elements_text
和ARRAY
将json数组转换为文本值列表TEXT[]
:这是另一种在json数组中查找元素的方法:
Demo here
iecba09b3#
希望这能解决你的问题
表格内容:a screenshot of the table content
它给出以下输出:
a screenshot of the solution output
如你所见,记录包含“{”和“}”;我只是使用
regexp_replace
函数删除了它们。现在的SQL是这样的:
结果:a screenshot of the final results