You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何根据JSON数组中subscriptions的元素数量查询数据

JSON数组长度筛选解决方案

首先注意你第一条数据的info字段JSON格式有误——数组里不能直接放键值对,正确格式应该是对象:{"subscriptions": [{"user": 1}, {"user": 2}]},如果是当前错误格式,得先修正才能正常解析。

假设info是合法的JSON对象,用JSON_LENGTH()就能直接获取subscriptions数组的元素数量,实现你要的筛选:

基础查询语句

SELECT * 
FROM user_info 
WHERE JSON_LENGTH(info->>'$.subscriptions') = 2;

兼容特殊场景(空数组、null值)

如果要避免info为null或者subscriptions不存在时的异常,加上额外判断:

SELECT * 
FROM user_info 
WHERE info IS NOT NULL 
  AND JSON_TYPE(info->>'$.subscriptions') = 'ARRAY'
  AND JSON_LENGTH(info->>'$.subscriptions') = 2;

关键函数说明

  • info->>'$.subscriptions':通过JSON路径提取subscriptions数组,->>是简化写法,等价于JSON_UNQUOTE(JSON_EXTRACT(info, '$.subscriptions'))
  • JSON_LENGTH():针对数组返回元素个数,针对对象返回键值对数量,这里刚好用来统计订阅数
  • JSON_TYPE():校验提取的内容是否为数组类型,避免非数组数据导致的计算错误

要是你的info字段确实是错误的数组包裹对象格式(["subscriptions": [...]]),优先建议修正数据格式;如果暂时没法改,也可以用JSON_LENGTH(info[0].subscriptions)来取值,但这种写法依赖错误格式,不推荐长期使用。

内容的提问来源于stack exchange,提问作者MikolaNika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 18:40:32