如何用Python将JSON中的'Keys'键替换为其对应值?
解决方案:替换JSON中的'Keys'键为对应值并导出CSV
完全可行,下面提供两种实现方式:纯Python处理JSON结构,以及用Pandas转换并导出CSV。
一、纯Python处理JSON结构
直接遍历嵌套的Groups列表,替换每个字典中的Keys键:
# 原始JSON数据 data = { 'TimePeriod': {'Start': '2022-11-28', 'End': '2022-11-29'}, 'Total': {}, 'Groups': [ {'Keys': ['AWS Backup'], 'Metrics': {'UnblendedCost': {'Amount': '0.000000111', 'Unit': 'USD'}}}, {'Keys': ['AWS Direct Connect'], 'Metrics': {'UnblendedCost': {'Amount': '0.0000111', 'Unit': 'USD'}}}, {'Keys': ['AWS Key Management Service'], 'Metrics': {'UnblendedCost': {'Amount': '0.000000111', 'Unit': 'USD'}}} ] } # 处理每个Group条目 for idx, group in enumerate(data['Groups']): # 提取Keys列表中的第一个元素作为新键(示例中为单元素列表) service_key = group.pop('Keys')[0] # 添加新的键值对 data['Groups'][idx][service_key] = [service_key]
处理后Groups中的每个条目会变成:
{'Metrics': {'UnblendedCost': {'Amount': '0.000000111', 'Unit': 'USD'}}, 'AWS Backup': ['AWS Backup']}
二、用Pandas转换并导出CSV
如果最终目标是导出CSV,直接将数据整理成表格结构更高效:
import pandas as pd # 提取公共时间区间 time_start = data['TimePeriod']['Start'] time_end = data['TimePeriod']['End'] # 构建CSV行数据 csv_rows = [] for group in data['Groups']: # 提取服务名称(替换后的键) service_name = group['Keys'][0] # 提取成本数据 cost_amount = group['Metrics']['UnblendedCost']['Amount'] cost_unit = group['Metrics']['UnblendedCost']['Unit'] csv_rows.append({ '时间起始': time_start, '时间结束': time_end, '服务名称': service_name, '成本金额': cost_amount, '成本单位': cost_unit }) # 转换为DataFrame并导出CSV df = pd.DataFrame(csv_rows) df.to_csv('aws成本数据.csv', index=False, encoding='utf-8-sig')
导出的CSV结构会是:
| 时间起始 | 时间结束 | 服务名称 | 成本金额 | 成本单位 |
|---|---|---|---|---|
| 2022-11-28 | 2022-11-29 | AWS Backup | 0.000000111 | USD |
| 2022-11-28 | 2022-11-29 | AWS Direct Connect | 0.0000111 | USD |
| 2022-11-28 | 2022-11-29 | AWS Key Management Service | 0.000000111 | USD |
注意事项
- 如果
Keys列表包含多个元素,可根据需求调整逻辑(比如用逗号拼接成字符串,或拆分为多行)。 - 导出CSV时指定
encoding='utf-8-sig'可避免中文乱码问题。
内容的提问来源于stack exchange,提问作者jellobeann
相关产品推荐
相关产品推荐

