PostgreSQL 9.6.1统计字符串格式JSON数组内JSON对象数量
统计PostgreSQL 9.6中字符串格式JSON数组的元素数量
嘿,针对你在PostgreSQL 9.6.1里统计字符串格式JSON数组元素数量的需求,我给你整理了两种实用的解决办法:
方法一:直接转换+内置函数统计
假设存储JSON字符串的字段名叫json_str_col,表为your_table,直接用下面的SQL就能拿到结果:
SELECT json_array_length(json_str_col::json) AS array_element_count FROM your_table;
逻辑很直观:
json_str_col::json先把字符串类型的内容强制转换成PostgreSQL能识别的JSON类型,它会自动解析你的字符串为JSON数组。json_array_length()是PostgreSQL 9.6已支持的内置函数,专门用来返回JSON数组里的元素个数,正好匹配你统计数组中JSON对象数量的需求。
方法二:兼容不规范的JSON格式(可选)
看你给的示例里,JSON数组最后一个对象后面多了个逗号——这类小瑕疵会导致JSON解析失败。如果你的数据里经常有这类格式问题,可以先清理再统计:
SELECT json_array_length( regexp_replace(json_str_col, ',\s*]$', ']')::json ) AS array_element_count FROM your_table;
这个查询的额外处理:
regexp_replace(json_str_col, ',\s*]$', ']')用正则表达式去掉数组末尾可能存在的多余逗号和空白字符,先把字符串修正为标准JSON格式。- 之后再转换成JSON类型,用同样的函数统计长度。
小提醒
- 如果数据存在严重的JSON格式错误(比如缺失引号、括号不匹配),转换还是会失败,得先修复数据本身的格式问题。
- 要是之后打算优化存储,可以考虑把字段类型改成
jsonb(性能比json更好),到时候只需要把::json换成::jsonb,对应的统计函数换成jsonb_array_length()就行。
内容的提问来源于stack exchange,提问作者Marcus S.F.
相关产品推荐
相关产品推荐

