如何检查JSON数组中指定键下是否存在给定目标值
判断JSON字段中是否存在指定邮箱条目的方法
你存储的JSON结构根节点下为user_info数组,每个数组元素包含email字段,根据你使用的场景不同,判断方式有区别,常见实现如下:
- MySQL(5.7及以上版本支持JSON类型)
使用JSON_CONTAINS函数直接匹配数组内的符合条件对象,语句示例:
语句能返回所有存在目标邮箱条目的记录,无返回结果则代表不存在对应条目。-- 替换成你实际的表名、JSON列名即可 SELECT * FROM 你的表名 WHERE JSON_CONTAINS(你的JSON列名, '{"email":"abc@xyz.com"}', '$.user_info'); - PostgreSQL(推荐使用JSONB类型存储,查询性能更高)
优先用JSONB包含运算符查询,支持走索引效率更高:
如果使用的是原生JSON类型,可以通过展开数组元素匹配:SELECT * FROM 你的表名 WHERE 你的JSON列名 -> 'user_info' @> '[{"email":"abc@xyz.com"}]'::jsonb;SELECT DISTINCT t.* FROM 你的表名 t, json_array_elements(t.你的JSON列名->'user_info') AS elem WHERE elem->>'email' = 'abc@xyz.com'; - SQL Server(2016及以上版本支持JSON操作)
用OPENJSON拆解数组后做存在性判断:SELECT * FROM 你的表名 t WHERE EXISTS ( SELECT 1 FROM OPENJSON(t.你的JSON列名, '$.user_info') WITH (email NVARCHAR(100) '$.email') WHERE email = 'abc@xyz.com' ); - 业务代码层判断
如果你已经把JSON字段查询到应用层解析为对象,可以直接遍历user_info数组判断是否存在符合条件的元素,以JavaScript为例:// parsedJson为解析后的JSON对象 const existTarget = parsedJson.user_info.some(member => member.email === 'abc@xyz.com') // existTarget 为布尔值,true代表存在对应条目
内容的提问来源于stack exchange,提问作者Debaleen Sengupta
相关产品推荐
相关产品推荐

