本教程详细介绍了如何使用python高效地将包含列表字典的json数据结构转换为csv文件。针对json数据中常见的嵌套列表字典格式,文章推荐并演示了如何利用pandas库创建dataframe,并将其轻松导出为结构化csv,确保每个字典作为一行,其键作为列标题,从而简化数据处理流程。
在数据处理中,将JSON格式的数据导出为CSV文件是一个常见需求。当JSON数据结构是一个扁平的字典时,直接提取其键作为CSV标题,值作为数据行相对简单。然而,当JSON数据变得更加复杂,特别是当它包含一个字典列表时,传统的逐键、逐值处理方法会变得繁琐且效率低下。例如,从API获取的数据常常以这种“列表字典”的形式呈现,其中每个字典代表一个独立的记录,而我们需要将这些记录逐一转换为CSV的行。
原始场景中,对于单个JSON字典:
{"id": 1702, "subnet": "10.111.0.0", "mask": "21", ...}可以直接通过dict.keys()和dict.values()写入CSV的标题行和数据行。但当数据结构变为如下所示的“data”键下包含一个列表,且列表中每个元素都是一个字典时:
"data": [
{"id": 1713, "subnet": "10.111.0.0", "mask": "27", ...},
{"id": 1714, "subnet": "10.111.0.32", "mask": "27", ...},
{"id": 1715, "subnet": "10.111.0.64", "mask": "27", ...}
]此时,“data”键的值是一个列表,而这个列表的每个元素又是一个字典。我们的目标是将列表中的每个字典转换为CSV文件中的独立一行,并以字典的键作为CSV的列标题。
Python的Pandas库是处理表格数据(如CSV、Excel、数据库表)的强大工具。它引入了DataFrame对象,能够非常直观和高效地处理列表字典这类结构化数据。Pandas能够自动识别字典的键作为列名,并将列表中的每个字典转换为DataFrame的一行。
首先,确保你的JSON数据已经通过json.loads()解析成了Python对象。假设我们有一个包含列表字典的Python字典,其结构与上述示例类似:
import pandas as pd
import json
# 模拟从API获取的JSON响应内容
json_data_string = """
{
"data": [
{"id": 1713, "subnet": "10.111.0.0", "mask": "27", "description": "POD_Site", "masterSubnetId": 1702},
{"id": 1714, "subnet": "10.111.0.32", "mask": "27", "description": "POD_Site", "masterSubnetId": 1702},
{"id": 1715, "subnet": "10.111.0.64", "mask": "27", "description": "POD_Site", "masterSubnetId": 1702}
]
}
"""
# 解析JSON字符串为Python字典
raw_data = json.loads(json_data_string)
# 提取需要转换为CSV的列表字典部分
# 注意:这里 'data' 是一个键,其值是一个列表。
# 我们需要的是这个列表本身,而不是整个包含 'data' 键的字典。
list_of_dicts_to_csv = raw_data["data"]
print("待处理的列表字典数据:")
for item in list_of_dicts_to_csv:
print(item)一旦获取到列表字典(list_of_dicts_to_csv),就可以使用pd.DataFrame()构造函数轻松地将其转换为DataFrame。Pandas会自动将每个字典的键识别为DataFrame的列,并将每个字典作为DataFrame的一行。
# 使用列表字典创建DataFrame
df = pd.DataFrame(list_of_dicts_to_csv)
print("\n生成的DataFrame:")
print(df)输出的DataFrame将如下所示:
id subnet mask description masterSubnetId 0 1713 10.111.0.0 27 POD_Site 1702 1 1714 10.111.0.32 27 POD_Site 1702 2 1715 10.111.0.64 27 POD_Site 1702
DataFrame对象提供了to_csv()方法,可以将数据轻松导出为CSV文件。
# 导出DataFrame到CSV文件
# index=False 参数用于防止Pandas将DataFrame的行索引写入CSV文件,
# 这样可以保持CSV文件的整洁,只包含实际数据。
output_filename = 'ipamsubnet_nested.csv'
df.to_csv(output_filename, index=False)
print(f"\n数据已成功导出到 {output_filename}")执行上述代码后,ipamsubnet_nested.csv文件内容将如下:
id,subnet,mask,description,masterSubnetId 1713,10.111.0.0,27,POD_Site,1702 1714,10.111.0.32,27,POD_Site,1702 1715,10.111.0.64,27,POD_Site,1702
这正是我们期望的结构,每个字典对应CSV的一行,键对应列标题。
import pandas as pd
import json
# 模拟从API获取的JSON响应内容
# 这是一个包含 "data" 键的字典,其值是一个列表,列表中每个元素都是一个字典。
json_data_string = """
{
"id": 1702,
"subnet": "10.111.0.0",
"mask": "21",
"sectionId": 3,
"description": "POD",
"linked_subnet": null,
"firewallAddressObject": null,
"vrfId": null,
"masterSubnetId": 1158,
"allowRequests": 0,
"vlanId": null,
"showName": 0,
"device": null,
"permissions": "{\\"
4\\":\\"3\\"}",
"pingSubnet": 0,
"discoverSubnet": 0,
"resolveDNS": 0,
"DNSrecursive": 0,
"DNSrecords": 0,
"nameserverId": 0,
"scanAgent": 0,
"customer_id": null,
"isFolder": 0,
"isFull": 0,
"isPool": 0,
"tag": 2,
"threshold": 0,
"location": null,
"editDate": null,
"lastScan": null,
"lastDiscovery": null,
"calculation": {"Type": "IPv4", "IP address": "/", "Network": "10.111.0.0", "Broadcast": "10.111.7.255", "Subnet bitmask": "21", "Subnet netmask": "255.255.248.0", "Subnet wildcard": "0.0.7.255", "Min host IP": "10.111.0.1", "Max host IP": "10.111.7.254", "Number of hosts": "2046", "Subnet Class": "private A"},
"data": [
{"id": 1713, "subnet": "10.111.0.0", "mask": "27", "sectionId": 3, "description": "POD_Site", "linked_subnet": null, "firewallAddressObject": null, "vrfId": null, "masterSubnetId": 1702, "allowRequests": 0, "vlanId": null, "showName": 0, "device": null, "permissions": "{\\"4\\":\\"3\\"}", "pingSubnet": 0, "discoverSubnet": 0, "resolveDNS": 0, "DNSrecursive": 0, "DNSrecords": 0, "nameserverId": 0, "scanAgent": 0, "customer_id": null, "isFolder": 0, "isFull": 0, "isPool": 0, "tag": 2, "threshold": 0, "location": null, "editDate": null, "lastScan": null, "lastDiscovery": null},
{"id": 1714, "subnet": "10.111.0.32", "mask": "27", "sectionId": 3, "description": "POD_Site", "linked_subnet": null, "firewallAddressObject": null, "vrfId": null, "masterSubnetId": 1702, "allowRequests": 0, "vlanId": null, "showName": 0, "device": null, "permissions": "{\\"4\\":\\"3\\"}", "pingSubnet": 0, "discoverSubnet": 0, "resolveDNS": 0, "DNSrecursive": 0, "DNSrecords": 0, "nameserverId": 0, "scanAgent": 0, "customer_id": null, "isFolder": 0, "isFull": 0, "isPool": 0, "tag": 2, "threshold": 0, "location": null, "editDate": null, "lastScan": null, "lastDiscovery": null},
{"id": 1715, "subnet": "10.111.0.64", "mask": "27", "sectionId": 3, "description": "POD_Site", "linked_subnet": null, "firewallAddressObject": null, "vrfId": null, "masterSubnetId": 1702, "allowRequests": 0, "vlanId": null, "showName": 0, "device": null, "permissions": "{\\"4\\":\\"3\\"}", "pingSubnet": 0, "discoverSubnet": 0, "resolveDNS": 0, "DNSrecursive": 0, "DNSrecords": 0, "nameserverId": 0, "scanAgent": 0, "customer_id": null, "isFolder": 0, "isFull": 0, "isPool": 0, "tag": 2, "threshold": 0, "location": null, "editDate": null, "lastScan": null, "lastDiscovery": null}
]
}
"""
# 1. 解析JSON字符串
parsed_json = json.loads(json_data_string)
# 2. 提取需要写入CSV的数据部分
# 确认 'data' 键是否存在且其值是一个列表
if "data" in parsed_json and isinstance(parsed_json["data"], list):
data_for_csv = parsed_json["data"]
else:
print("错误:JSON结构中未找到 'data' 键或其值不是一个列表。")
# 如果 'data' 不存在,或者不是列表,可以尝试处理其他结构,
# 或者直接退出/抛出错误。
exit()
# 3. 使用Pandas创建DataFrame
# pd.DataFrame() 能够直接将列表字典转换为 DataFrame,
# 字典的键将成为列名,每个字典成为一行。
df = pd.DataFrame(data_for_csv)
# 4. 导出DataFrame到CSV文件
# index=False 确保不将 DataFrame 的行索引写入 CSV 文件。
output_csv_filename = 'ipamsubnet_subnets.csv'
df.to_csv(output_csv_filename, index=False)
print(f"成功将数据导出到 '{output_csv_filename}'")
print("\nCSV文件内容预览:")
# 读取并打印前几行以验证
with open(output_csv_filename, 'r') as f:
for i, line in enumerate(f):
print(line.strip())
if i >= 4: # 打印标题行和前4行数据
break通过本教程,你现在应该能够熟练地使用Python和Pandas库,将JSON格式中包含列表字典的数据高效、准确地导出为CSV文件,从而简化你的数据处理工作流。
# excel
# python
# js
# json
# 工具
# csv
# dns
# 数据清洗
# csv文件
相关文章:
如何快速搭建高效简练网站?
香港服务器如何优化才能显著提升网站加载速度?
如何快速生成高效建站系统源代码?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
Android自定义listview布局实现上拉加载下拉刷新功能
如何选择适配移动端的WAP自助建站平台?
建站三合一如何选?哪家性价比更高?
如何快速搭建响应式可视化网站?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
如何在Windows环境下新建FTP站点并设置权限?
焦点电影公司作品,电影焦点结局是什么?
贸易公司网站制作流程,出口贸易网站设计怎么做?
如何通过PHP快速构建高效问答网站功能?
郑州企业网站制作公司,郑州招聘网站有哪些?
建站之星2.7模板:企业网站建设与h5定制设计专题
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
英语简历制作免费网站推荐,如何将简历翻译成英文?
寿县云建站:智能SEO优化与多行业模板快速上线指南
建站10G流量真的够用吗?如何应对访问高峰?
网站网页制作专业公司,怎样制作自己的网页?
建站之星logo尺寸如何设置最合适?
网站制作公司,橙子建站是合法的吗?
如何快速查询网站的真实建站时间?
ui设计制作网站有哪些,手机UI设计网址吗?
代刷网站制作软件,别人代刷火车票靠谱吗?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
实现点击下箭头变上箭头来回切换的两种方法【推荐】
制作公司内部网站有哪些,内网如何建网站?
教程网站设计制作软件,怎么创建自己的一个网站?
黑客如何通过漏洞一步步攻陷网站服务器?
建站之星如何实现PC+手机+微信网站五合一建站?
如何高效完成独享虚拟主机建站?
如何安全更换建站之星模板并保留数据?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
css网站制作参考文献有哪些,易聊怎么注册?
建站之星代理费用多少?最新价格详情介绍
SQL查询语句优化的实用方法总结
5种Android数据存储方式汇总
建站之星代理如何获取技术支持?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
建站上传速度慢?如何优化加速网站加载效率?
定制建站是什么?如何实现个性化需求?
怀化网站制作公司,怀化新生儿上户网上办理流程?
股票网站制作软件,网上股票怎么开户?
完全自定义免费建站平台:主题模板在线生成一站式服务
建站之星免费模板:自助建站系统与智能响应式一键生成
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
想学网站制作怎么学,建立一个网站要花费多少?
如何快速查询域名建站关键信息?
*请认真填写需求信息,我们会在24小时内与您取得联系。