sql - 如何在 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 的理解似乎有点有限。
解决方案
运算符的右手参数->
应该是一个text
值,而不是一个json
值。所以一'InnerArray'::json
开始就不需要演员阵容。
但这也是您错误的原因,因为'InnerArray'
它不是有效的 JSON 值,因此您不能将其转换为一个。
采用:
SELECT json_array_length("Data"::json -> 'InnerArray') AS lengtha
顺便说一句:如果您确实存储 JSON 值,则您的列应定义为jsonb
(或至少json
),而不是使用text
(或varchar
)并在每次您想使用 JSON 函数时对其进行强制转换。
推荐阅读
- python - 尝试 pip install dict 包时出现 docker build 错误
- pandas - 展平熊猫中的多索引
- postgresql - DataGrip SSL 错误:标签不匹配!javax.crypto.AEADBadTagException:标签不匹配
- microsoft-graph-api - 使用机器人录制 Microsoft Teams 会话(音频/视频/屏幕共享)
- visual-studio-code - WSL 不适用于 VS 代码。这里可能是什么问题?
- reactjs - 从嵌套列表中拖动项目时拖动后备项目的奇怪行为
- firewalld - 使用防火墙丰富的规则丢弃具有特定源和目标端口的环回数据包
- java - CXFServlet 抛出 java.lang.NoSuchMethodError:
- javascript - 计算 HTML 表单中的总行数
- swift - 在 UIKit 中模糊自定义 TabBar