PSQL json 列未将数组解释为数组

PSQL json column not interpreting array as array

提问人:Eugenio.Gastelum96 提问时间:9/27/2023 更新时间:9/29/2023 访问量:27

问:

我有一个关于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_nameextracted_amounts

Array as Text data type on psql

或者。我已经看到还有 和 运算符可以从文档中的 json 中的数组属性中提取特定索引,它确实有效#>#>>SELECT offer#> '{possible_amounts,0}' as extracted_amounts FROM table_name

Extract array index from json in psql

但是,这仅适用于提取一个值(我示例中的第一个值),我想将整个数组提取到数组类型的列中。这可能吗?

sql json 嵌套 psql

评论


答:

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 好点子。我现在已经更改了示例,以展示如何在不解开它的情况下将数组用作数组。