如何从非数组结构提取动态顶级ID作为campaign_id并添加corrections字段
JSON 转换:提取动态顶级ID并合并字段
核心思路
源JSON的顶级键是动态的campaign_id,每个键对应的数据包含report.rows(业务数据行)和report.totals.corrections(修正值)。我们需要遍历所有顶级键,将campaign_id和corrections字段注入到每一行数据中,最后合并成统一数组。
JavaScript 实现
const sourceData = { "16320673": { "title": "№ 16320673, 01.09.2025-01.09.2025", "report": { "rows": [ { "search_query": "", "date": "01.09.2025", "sku": "1849832652", "views": "5707", "clicks": "39", "moneySpent": "548,25" } ], "totals": { "search_query": "", "views": "5707", "clicks": "39", "moneySpent": "499,99", "corrections": "-48,26" } } }, "16410086": { "title": "№ 16410086, 01.09.2025-01.09.2025", "report": { "rows": [ { "search_query": "", "date": "01.09.2025", "sku": "145078661", "views": "380", "clicks": "20", "moneySpent": "253,51" } ], "totals": { "search_query": "", "views": "380", "clicks": "20", "moneySpent": "230,94", "corrections": "-22,57" } } } }; // 处理逻辑 const result = Object.entries(sourceData).flatMap(([campaignId, campaignData]) => { const corrections = campaignData.report.totals.corrections; return campaignData.report.rows.map(row => ({ ...row, campaign_id: campaignId, corrections })); }); console.log(JSON.stringify(result, null, 2));
代码说明:
Object.entries(sourceData):将源对象转换为键值对数组,每一项为[动态ID, 对应数据对象]flatMap:遍历所有键值对,自动将多个rows数组合并为一个结果数组(适配单/多行数据场景)- 扩展运算符
...row:保留原有字段,同时注入campaign_id和corrections字段
Python 实现
import json source_data = { "16320673": { "title": "№ 16320673, 01.09.2025-01.09.2025", "report": { "rows": [ { "search_query": "", "date": "01.09.2025", "sku": "1849832652", "views": "5707", "clicks": "39", "moneySpent": "548,25" } ], "totals": { "search_query": "", "views": "5707", "clicks": "39", "moneySpent": "499,99", "corrections": "-48,26" } } }, "16410086": { "title": "№ 16410086, 01.09.2025-01.09.2025", "report": { "rows": [ { "search_query": "", "date": "01.09.2025", "sku": "145078661", "views": "380", "clicks": "20", "moneySpent": "253,51" } ], "totals": { "search_query": "", "views": "380", "clicks": "20", "moneySpent": "230,94", "corrections": "-22,57" } } } } result = [] for campaign_id, campaign_data in source_data.items(): corrections = campaign_data['report']['totals']['corrections'] for row in campaign_data['report']['rows']: # 复制原有行数据,避免修改原对象 new_row = row.copy() new_row['campaign_id'] = campaign_id new_row['corrections'] = corrections result.append(new_row) print(json.dumps(result, indent=2, ensure_ascii=False))
代码说明:
source_data.items():遍历源字典的所有键值对,获取动态ID和对应数据- 嵌套循环:外层遍历所有campaign,内层遍历每个campaign的业务数据行
row.copy():复制原行数据,防止修改源数据的引用
内容的提问来源于stack exchange,提问作者Mark Avreliy
相关产品推荐
相关产品推荐

