首页 > 解决方案 > 如何在 postgres 中选择 json 数组的大小?

问题描述

我已经为此奋斗了很长时间,但我无法构建一个查询,该查询将选择(最好也排序)数组中的项目计数。

我确实有这样的表格数据:

ID    Data
1     {"$id": "1", "InnerArray": [{"$id": "1", "Timestamp": "2020-06-18T09:43:19.4873323+01:00"}, {"$id": "3", "Timestamp": "2020-06-19T08:25:35.7768657+00:00"}]}
etc...

而我尝试了什么...

SELECT JSON_ARRAY_LENGTH("Data" ->'InnerArray'::json) AS lengtha
FROM "mystorage"

SELECT JSON_ARRAY_LENGTH("Data"::json ->'InnerArray'::json) AS lengtha

但它说

SQL Error [22P02]: ERROR: invalid input syntax for type json
  Detail: Token "InnerArray" is invalid.
  Position: 49
  Where: JSON data, line 1: InnerArray

我尝试了很多不同的格式,但是来自 MS SQL 世界,我对 PostgreSQL 的理解似乎有点有限。

标签: sqlarraysjsonpostgresql

解决方案


运算符的右手参数->应该是一个text值,而不是一个json值。所以一'InnerArray'::json开始就不需要演员阵容。

但这也是您错误的原因,因为'InnerArray'它不是有效的 JSON 值,因此您不能将其转换为一个。

采用:

SELECT json_array_length("Data"::json -> 'InnerArray') AS lengtha

顺便说一句:如果您确实存储 JSON 值,则您的列应定义为jsonb(或至少json),而不是使用text(或varchar)并在每次您想使用 JSON 函数时对其进行强制转换。


推荐阅读