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

Python嵌套列表转JSON:如何构建数据生成指定嵌套结构

在Python中构建嵌套JSON结构并转CSV的实用方案

嘿,我来帮你搞定这个嵌套JSON的构建问题!你已经能处理单层字典转JSON了,嵌套的其实原理一样——Python的dict对应JSON的对象,list对应JSON的数组,直接层层嵌套就行。下面给你一步步来:

一、先搞定嵌套JSON的构建

直接用Python的内置数据结构堆出你要的层级就行,举个和你示例匹配的完整代码:

import json

# 从最内层开始构建,一步步往外包
# 最内层的name条目
name_item_1 = {"diesel": "yes", "fuel_type": "high-pressure"}
name_item_2 = {"diesel": "no", "fuel_type": "regular"}
# 然后是engine条目
engine_item = {"mod_a": "x1", "name": [name_item_1, name_item_2]}
# 接着是car条目
car_item_1 = {"car": "brown", "color": "yellow", "engine": [engine_item]}
car_item_2 = {"car": "silver", "color": "gray", "engine": [{"mod_a": "x2", "name": [{"diesel": "yes", "fuel_type": "medium"}]}]}

# 最后组装成顶层结构
final_data = {
    "Prop_a": [car_item_1, car_item_2]
}

# 写入JSON文件,indent=4让格式更清晰
with open("nested_data.json", "w", encoding="utf-8") as f:
    json.dump(final_data, f, indent=4, ensure_ascii=False)

运行完你打开nested_data.json,就是你要的那种嵌套结构,完全符合Prop_a是数组、里面包含带engine数组的对象、engine里又有name数组的要求。

二、转CSV用于数据库导入

CSV是扁平结构,直接转嵌套JSON会丢数据,所以得先把嵌套结构扁平化——就是把嵌套的键用.或者[]连接成单层键,比如engine[0].mod_a。这里给你一个好用的递归扁平化函数:

import csv

def flatten_nested(data, parent_key="", sep="."):
    flattened = {}
    for key, value in data.items():
        # 拼接新的键名,比如parent_key是engine[0],key是mod_a,就变成engine[0].mod_a
        new_key = f"{parent_key}{sep}{key}" if parent_key else key
        if isinstance(value, dict):
            # 如果是字典,递归扁平化
            flattened.update(flatten_nested(value, new_key, sep))
        elif isinstance(value, list):
            # 如果是列表,给每个元素加索引标记,比如name[0]、name[1]
            for idx, item in enumerate(value):
                if isinstance(item, dict):
                    flattened.update(flatten_nested(item, f"{new_key}[{idx}]", sep))
                else:
                    flattened[f"{new_key}[{idx}]"] = item
        else:
            # 普通值直接存
            flattened[new_key] = value
    return flattened

# 把Prop_a里的每个条目都扁平化
flattened_list = [flatten_nested(item) for item in final_data["Prop_a"]]

# 写入CSV文件
if flattened_list:
    # 取第一个条目的键作为表头
    headers = flattened_list[0].keys()
    with open("flat_data.csv", "w", newline="", encoding="utf-8") as f:
        writer = csv.DictWriter(f, fieldnames=headers)
        writer.writeheader()
        writer.writerows(flattened_list)

生成的CSV里,所有嵌套层级都会被展开成类似engine[0].mod_a、engine[0].name[0].diesel的列名,导入数据库的时候直接映射字段就行。

额外小建议

  • 如果要批量生成大量嵌套数据,别手动写每个条目,用循环或者生成器批量构建就行,效率高多了。
  • 有些数据库(比如PostgreSQL、MongoDB)直接支持导入JSON格式,不用转CSV,还能保留嵌套结构,适合后续做复杂查询,你可以根据自己的数据库类型选更合适的方式。

内容的提问来源于stack exchange,提问作者Shawn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:29:24