如何基于JSON数组实现可扩展的消费者分群归类?
基于JSON数组实现消费者分群归类的方案
核心思路
- 解析分群定义为通用规则集合,不硬编码分群名称,天然支持后续新增分群
- 预处理消费者数据,将嵌套的
type/value结构扁平化,简化条件判断流程 - 编写通用匹配逻辑,遍历所有分群规则,逐一验证消费者属性是否符合分群要求
代码实现(Python)
import json # 原始分群定义JSON segment_def_json = ''' {"Segment_definitions":[{"segmentName":"S1","definition":{"a1":[19.0,25.0],"a2":["Seg2"]}},{"segmentName":"S2","definition":{"a4":[true,false],"a3":[4,6],"a1":[-1.0,21.0]}}]} ''' # 原始消费者数据JSON customers_json = ''' [ {"a1":{"type":"Double","value":21.0},"a2":{"type":"string","value":"Seg1"},"a3":{"type":"Int","value":5},"a4":{"type":"Boolean","value":false}}, {"a1":{"type":"Double","value":2.0},"a2":{"type":"string","value":"Seg2"},"a3":{"type":"Int","value":-1},"a4":{"type":"Boolean","value":true}} ] ''' # 解析JSON数据 segment_defs = json.loads(segment_def_json)["Segment_definitions"] customers = json.loads(customers_json) # 预处理消费者数据:扁平化type/value结构 def preprocess_customer(customer): return {attr: detail["value"] for attr, detail in customer.items()} processed_customers = [preprocess_customer(cust) for cust in customers] # 单个分群匹配逻辑 def match_segment(customer, segment): rules = segment["definition"] for attr, condition in rules.items(): # 消费者无该属性直接不匹配 if attr not in customer: return False cust_val = customer[attr] # 区分区间规则和枚举列表规则 if isinstance(condition, list): # 数值区间规则(列表含两个数值):左闭右闭 if len(condition) == 2 and all(isinstance(x, (int, float)) for x in condition): min_val, max_val = condition if not (min_val <= cust_val <= max_val): return False # 枚举规则(字符串/布尔值列表):值需在列表内 else: if cust_val not in condition: return False return True # 获取消费者匹配的所有分群 def get_matched_segments(customer, segments): matched = [] for seg in segments: if match_segment(customer, seg): matched.append(seg["segmentName"]) return matched # 执行匹配并输出结果 for idx, cust in enumerate(processed_customers, 1): matched = get_matched_segments(cust, segment_defs) print(f"消费者{idx}匹配分群:{matched}")
结果说明
- 消费者1匹配分群:
['S2'],满足S2的所有规则:a4值在枚举列表内、a3在4-6区间、a1在-1到21区间;不满足S1的a2规则(值为Seg1不在S1的a2列表内) - 消费者2无匹配分群:不满足S1的a1区间要求,也不满足S2的a3区间要求
扩展性说明
- 新增分群:只需在
Segment_definitions数组中添加新的分群对象,代码会自动遍历匹配,无需修改逻辑 - 新增规则类型:如需支持字符串模糊匹配、数值大于/小于等规则,只需在
match_segment函数中添加对应的条件判断分支即可
内容的提问来源于stack exchange,提问作者prj
相关产品推荐
相关产品推荐

