按日期分组JSON订单数据并汇总每日销售额的实现需求
解决方案:按日期汇总订单销售额并生成全月统计JSON
实现步骤与代码
要完成需求,需依次处理数据解析、日期分组汇总、全月列表生成和格式输出四个核心环节,以下是完整可运行的Python代码:
import json from datetime import datetime import calendar # 原始订单JSON数据(替换为你的实际数据) jsondump = '''{"orders":[{"total_price":"100.10","updated_at":"2022-12-29T12:10:39+01:00"},{"total_price":"50.20","updated_at":"2022-12-29T12:05:02+01:00"},{"total_price":"53.20","updated_at":"2022-12-29T12:00:39+01:00"},{"total_price":"50.00","updated_at":"2022-12-28T11:54:29+01:00"},{"total_price":"30.00","updated_at":"2022-12-27T13:35:03+01:00"}]}''' # 1. 解析JSON并提取订单数据 order_data = json.loads(jsondump)['orders'] # 2. 按日期(日)分组汇总销售额 daily_sales = {} for order in order_data: # 解析带时区的日期字符串,提取当月日期 dt = datetime.fromisoformat(order['updated_at']) day = dt.day # 转换价格为浮点数进行累加 price = float(order['total_price']) daily_sales[day] = daily_sales.get(day, 0.0) + price # 3. 获取订单所属年月及该月总天数 first_order_dt = datetime.fromisoformat(order_data[0]['updated_at']) year, month = first_order_dt.year, first_order_dt.month _, total_days = calendar.monthrange(year, month) # 4. 生成全月日期统计列表 day_list = [] for day in range(1, total_days + 1): sales = daily_sales.get(day, 0.0) day_list.append({ "total_day_sales": f"{sales:.2f}", "day_in_themonth": str(day) }) # 5. 转换为目标JSON格式 result = {"day": day_list} print(json.dumps(result, indent=2))
关键细节说明
- 可靠日期解析:用
datetime.fromisoformat()处理带时区的日期字符串,比直接截取字符串更稳定,避免因格式微调出错。 - 分组累加逻辑:通过字典
daily_sales存储每日销售额,键为日期整数,值为累计金额,遍历订单时完成同日期金额合并。 - 全月日期生成:借助
calendar.monthrange()获取指定年月的总天数,循环生成1到总天数的所有日期,无数据时销售额设为0.00。 - 格式匹配:将最终金额格式化为两位小数的字符串,完全匹配目标JSON的格式要求。
输出结果
运行代码后会输出符合需求的JSON:
{ "day": [ {"total_day_sales": "0.00", "day_in_themonth": "1"}, {"total_day_sales": "0.00", "day_in_themonth": "2"}, ... {"total_day_sales": "30.00", "day_in_themonth": "27"}, {"total_day_sales": "50.00", "day_in_themonth": "28"}, {"total_day_sales": "203.50", "day_in_themonth": "29"}, {"total_day_sales": "0.00", "day_in_themonth": "30"}, {"total_day_sales": "0.00", "day_in_themonth": "31"} ] }
内容的提问来源于stack exchange,提问作者Roman_Py
相关产品推荐
相关产品推荐

