Django中如何按相同关联key值将字典转换为指定格式JSON数组?
Django 批量字段分组合并实现方案
实现思路
- 遍历原始字典键值对,拆分每个键得到字段名和方括号内的分组标识
- 以分组标识为key构建临时存储字典,将同组字段存入同一个子对象
- 对数值类字段做类型转换后,提取临时字典的values即为目标结果
完整实现代码
# 原始数据,Django场景下可直接替换为 request.POST 等获取到的QueryDict对象 raw_data = { 'include_product_id[x_734652]': ['1'], 'product_name[x_734652]': ['Test_1'], 'product_qty[x_734652]': ['1'], 'product_price[x_734652]': ['10'], 'total_amount[x_734652]': ['10'], 'include_product_id[x_332559]': ['2'], 'product_name[x_332559]': ['Test_2'], 'product_qty[x_332559]': ['10'], 'product_price[x_332559]': ['10'], 'total_amount[x_332559]': ['100'] } # 临时存储分组数据 group_map = {} for raw_key, val_list in raw_data.items(): # 拆分键名,分离字段和分组标识 field, group_id_part = raw_key.split('[', 1) group_id = group_id_part.rstrip(']') # 取列表第一个元素作为实际值 real_val = val_list[0] # 数值类型字段转换为整型,可根据需求调整转换规则 if field in ('include_product_id', 'product_qty', 'product_price', 'total_amount'): real_val = int(real_val) # 写入分组 if group_id not in group_map: group_map[group_id] = {} group_map[group_id][field] = real_val # 转换为目标数组格式 result = list(group_map.values())
输出JSON格式结果
如果需要输出JSON字符串,可调用json模块处理:
import json print(json.dumps(result, indent=2, ensure_ascii=False))
注意事项
- Django场景下如果是从POST请求获取参数,直接遍历
request.POST即可,无需额外转换为dict - 若存在浮点类型的价格字段,可将对应位置的
int()修改为float()适配
内容的提问来源于stack exchange,提问作者vinitha
相关产品推荐
相关产品推荐

