如何用Python通过for循环生成指定结构的JSON文件(从其他JSON取名称)
解决Python循环生成完整JSON结构的问题
问题根源
你的代码在循环中每次都会重新创建dictionary变量,导致之前循环生成的内容被完全覆盖,最终只保留最后一次循环的结果。如果循环过程中还执行了多次JSON输出/写入操作,就会生成多个独立的JSON对象,而非你需要的单一大JSON结构。
修正后的代码
import json # 假设data是从外部JSON文件解析得到的字典 result_dict = {} # 循环外初始化空字典,用于存储所有条目 for person in data['person']: name = person['name'] # 向空字典中添加键值对,而非重新创建字典 result_dict[name] = { "Age": person.get('age', 25), # 可根据实际数据取age,无数据则用默认值25 "Gender": person.get('gender', 'Female') # 同理,默认值设为Female } # 一次性序列化整个完整字典 json_output = json.dumps(result_dict, indent=4) # 输出或写入文件 print(json_output) # with open('output.json', 'w') as f: # f.write(json_output)
关键说明
- 初始化位置要正确:必须在循环外部创建空字典,这样循环过程中是不断往同一个字典里追加内容,而非每次覆盖。
- 添加键值对的方式:用
result_dict[name] = {...}的语法,将每个人员的名称作为顶级键,对应的Age和Gender作为值存入字典。 - 单次序列化:循环结束后,只需要调用一次
json.dumps(),将整个完整的字典转换为JSON字符串,就能得到你期望的单JSON对象结构。
正确输出示例
{ "Name1": { "Age": 30, "Gender": "Male" }, "Name2": { "Age": 25, "Gender": "Female" } }
内容的提问来源于stack exchange,提问作者Abhi
相关产品推荐
相关产品推荐

