如何用JSON表示前端用户的筛选条件?
用JSON结构化存储前端筛选条件的成熟方案
你需要的这种将用户筛选偏好编码为JSON的需求,已经有非常成熟的实践方案,主流分为两种方向,可根据你的场景复杂度选择:
1. MongoDB风格查询语法(推荐用于中简单场景)
这种方案借鉴MongoDB的查询文档格式,用JSON对象直接描述字段的匹配规则,语义清晰且易于前端生成和解析。针对你给出的示例需求,对应的JSON结构如下:
{ "userEmail": { "$in": ["X@fake.com", "Y@fake.com", "Z@fake.com"] }, "tags": { "$all": ["A", "B"] } }
- 核心逻辑:每个字段对应一个规则对象,用
$in、$all、$eq、$gt等操作符定义匹配条件 - 优势:结构简洁,前端开发者易理解,很多工具库(如lodash的
_.matches、sift.js)直接支持这种语法的筛选执行 - 适用场景:大多数无复杂嵌套逻辑的筛选需求
2. 类SQL AST的结构化查询(推荐用于复杂场景)
如果你的筛选涉及多层嵌套的AND/OR/NOT逻辑,可以采用类似SQL抽象语法树(AST)的结构,用明确的节点类型描述逻辑关系。针对你的示例,对应的JSON结构如下:
{ "type": "AND", "conditions": [ { "type": "IN", "field": "userEmail", "values": ["X@fake.com", "Y@fake.com", "Z@fake.com"] }, { "type": "ALL", "field": "tags", "values": ["A", "B"] } ] }
- 核心逻辑:用
type字段定义逻辑节点类型(AND/OR/NOT),conditions数组包含子条件;子条件同样用type定义操作类型(IN/ALL/EQ等),搭配field和values指定目标字段和匹配值 - 优势:扩展性极强,可支持任意复杂的逻辑组合,比如嵌套的
OR条件、多字段联合判断等 - 适用场景:需要支持复杂筛选逻辑的场景,比如用户可以自由组合多个条件组
实践建议
- 确定结构后,前端UI只需根据用户的选择生成对应的JSON结构即可,无需关心后续的筛选执行逻辑
- 存储时直接将JSON存入数据库(多数数据库都支持JSON类型字段),取回后可根据结构自行实现筛选函数,或使用现成库解析执行
内容的提问来源于stack exchange,提问作者Aaron Parisi
相关产品推荐
相关产品推荐

