提问人:Eugenio.Gastelum96 提问时间:9/27/2023 更新时间:9/29/2023 访问量:27
PSQL json 列未将数组解释为数组
PSQL json column not interpreting array as array
问:
我有一个关于psql的表,其中一列称为offer,并且是类型,而不是文本。里面的 json 有一个属性作为数组。但是,当我使用运算符将该属性提取到列中时,我收到的是文本数据类型,而不是数组类型。我想收到一个数组json
->>
该 JSON 列的每一行都具有这些结构
{"possible_amounts": [3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 11000, 12000, 13000],
"possible_weeks": [4],
"salary_multiplier": null,
"is_scored": false}
但是,如果我运行此查询,则生成的列以文本数据类型出现,并且我无法将数组函数应用于它。SELECT offer ->> 'possible_amounts' as extracted_amounts FROM table_name
extracted_amounts
或者。我已经看到还有 和 运算符可以从文档中的 json 中的数组属性中提取特定索引,它确实有效#>
#>>
SELECT offer#> '{possible_amounts,0}' as extracted_amounts FROM table_name
但是,这仅适用于提取一个值(我示例中的第一个值),我想将整个数组提取到数组类型的列中。这可能吗?
答:
1赞
j.d.o.
9/27/2023
#1
使用运算符获取 JSON 格式的值,在本例中为数组。运算符将其作为文本返回。->
->>
SELECT offer -> 'possible_amounts' as extracted_amounts FROM table_name;
例子
选择整个数组:
SELECT ('{
"numbers": [1, 2, 3, 4, 5]
}'::json -> 'numbers') AS numbers_array;
选择第三个数组元素:
SELECT (
'{
"numbers": [1, 2, 3, 4, 5]
}'::json -> 'numbers' -> 3
) AS third_element;
手动输入:https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-JSON-OP-TABLE
评论
0赞
Eugenio.Gastelum96
9/28/2023
谢谢你的提示。但是,如果我只用一个箭头使用它,我会将其作为 json 数据类型。然后,如果我尝试,它会说函数 unnest 不存在,可能是因为它不适用于 jsons?SELECT unnest(offer -> 'possible_amounts') AS amts FROM table_name;
ERROR: function unnest(json) does not exist
0赞
j.d.o.
9/28/2023
@Eugenio.Gastelum96 抱歉,请改用 jsonb_array_elements()。需要从 json 强制转换为 jsonb。已更新解决方案示例。
0赞
Eugenio.Gastelum96
9/28/2023
但这会将数组展开为行,对吗?我正在寻找的是,如果一行有一个包含数组属性的 json 列,那么结果应该是具有数组类型列的单行
0赞
j.d.o.
9/29/2023
@Eugenio.Gastelum96 好点子。我现在已经更改了示例,以展示如何在不解开它的情况下将数组用作数组。
评论