如何将已扁平化的JSON文件转换为Excel可识别的格式?
如何修改JSON扁平化代码以适配Excel导入需求
你遇到的核心问题是:当前的扁平化代码把多个实体的属性都塞进了单个字典,用数字前缀(如0_parcel_xxx、1_parcel_xxx)区分不同实体,导致Excel导入时无法识别为结构化表格(把每个键值对拆成了单独的行列)。我们需要调整代码,让每个实体成为独立的字典,最终输出一个字典列表,这样Excel就能正确识别为多行数据,相同属性自动对应列。
修改后的扁平化代码
我调整了原函数的逻辑,让它能处理最外层的列表结构,把每个实体单独扁平化,最终返回字典列表:
import json def flatten_json(y): def flatten(x, name=''): out = {} # 处理字典类型的嵌套 if type(x) is dict: for key in x: # 递归扁平化子元素,拼接键名 flattened_sub = flatten(x[key], name + key + '_') out.update(flattened_sub) # 处理列表类型的嵌套(内部列表仍保留索引前缀) elif type(x) is list: idx = 0 for item in x: flattened_sub = flatten(item, name + str(idx) + '_') out.update(flattened_sub) idx += 1 # 基础类型,直接存入结果 else: out[name[:-1]] = x return out # 核心调整:如果输入是列表(多个实体),逐个扁平化后返回列表 if isinstance(y, list): return [flatten(item) for item in y] # 单个实体则返回扁平化后的字典 else: return flatten(y)
代码说明
- 原问题的根源:你的旧代码把所有嵌套结构(包括多个实体的列表)都合并到了一个字典里,导致不同实体的属性用数字前缀区分,Excel无法识别为多行。
- 关键改进:新增了对最外层列表的判断,遍历每个实体单独扁平化,最终输出一个字典列表——每个字典对应一个parcel的所有属性,没有多余的数字前缀。
- 内部列表处理:对于实体内部的列表(比如
sections里的嵌套列表),仍然保留索引前缀(如sections_0_0_0_buildingId),这能保留原始的嵌套结构信息,同时不影响Excel识别。
使用示例
假设你的原始JSON数据是包含多个parcel的列表,用法如下:
# 示例原始数据(模拟你的嵌套结构) original_data = [ { "parcel": { "mapicon": None, "mapiconselected": None, "sections": [[[ {"buildingId": 123456, "id": 123, "LandUseCode": "R00", "Neighborhood": "S110", "landUseCodeDescription": "SINGLE", "LandSize": "1 LOT", "Exemption": None, "Tax_MunDist": "NYC", "SaleDate": "05/10/2021"} ]]] } }, { "parcel": { "mapicon": None, "mapiconselected": None, "sections": [[[ {"buildingId": 56789, "id": 321, "LandUseCode": "Z00", "Neighborhood": "D110", "landUseCodeDescription": "SINGLE", "LandSize": "2 LOT", "Exemption": None, "Tax_MunDist": "NYC", "SaleDate": "09/10/2021"} ]]] } } ] # 扁平化处理 flattened_parcels = flatten_json(original_data) # 导出为JSON文件 with open('parcels_for_excel.json', 'w') as f: json.dump(flattened_parcels, f, indent=2)
Excel导入步骤
导出的JSON文件可以直接被Excel识别为结构化表格:
- 打开Excel,切换到数据选项卡
- 点击获取数据 → 从文件 → 从JSON
- 选择导出的
parcels_for_excel.json,Excel会自动解析为表格:每个parcel对应一行,每个属性对应一列 - 加载后即可直接使用高级筛选功能
这样就完美解决了Excel无法识别扁平化格式的问题,同时保留了所有实体数据。
内容的提问来源于stack exchange,提问作者BeanData
相关产品推荐
相关产品推荐

