如何将Python嵌套字典以字典而非字符串形式存入JSON文件?
解决Python嵌套字典存入JSON后子字典变为字符串的问题
问题现象
你定义了嵌套字典dict = {"fadfafa": {"price": 5}},使用json.dump()写入JSON文件后,文件内容显示为{"fadfafa":"{\"price\" : 5}"},子字典被转为字符串;用json.load()读取时,该值仍为字符串而非嵌套字典。你的示例代码存在语法错误,这是导致问题的核心原因。
正确的写入代码
json.dump()需要传入两个必填参数:待序列化的对象和打开的文件对象,同时文件需以**写入模式(w)**打开。另外,避免用dict作为变量名(会覆盖Python内置的字典类型),正确代码如下:
import json # 用更合理的变量名替代dict data = {"fadfafa": {"price": 5}} # 以写入模式打开文件,指定utf-8编码避免乱码 with open('temp.json', 'w', encoding='utf-8') as output_file: json.dump(data, output_file)
执行后,JSON文件内容会是正确的嵌套结构:
{"fadfafa": {"price": 5}}
正确的读取代码
你的读取代码存在语法错误,正确的读取方式只需传入打开的文件对象即可,json.load()默认会将JSON嵌套结构恢复为Python的嵌套字典:
import json with open('temp.json', 'r', encoding='utf-8') as input_file: loaded_data = json.load(input_file) # 验证子字典类型,会输出 <class 'dict'> print(type(loaded_data["fadfafa"]))
关键注意事项
- 禁止使用
dict作为变量名,避免覆盖Python内置的dict类型,引发不必要的bug。 - 操作文件时必须指定正确的模式:写入用
w,读取用r,推荐显式指定编码(如utf-8)。 json.dump()默认支持嵌套字典的序列化,无需额外配置钩子参数,仅在处理自定义类等特殊类型时才需要自定义钩子。
内容的提问来源于stack exchange,提问作者Keith
相关产品推荐
相关产品推荐

