You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从非数组结构提取动态顶级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 10:17:09