Python中如何将含OrderedDict的JSON对象写入.json文件?
解决有序字典JSON的高效写入问题
嘿,我完全懂你的困扰——你用OrderedDict加载JSON就是为了保持键的顺序,但手动拼接字符串的写入方式完全没处理好有序字典的序列化,反而把它直接输出成了OrderedDict([...])这种不合法的JSON内容,既麻烦又容易出错对吧?
别担心,Python自带的json模块就可以完美解决这个问题,根本不需要手动解析字符串!
问题出在哪?
你之前的写入逻辑是把整个jsonObj转成字符串后手动替换符号,但OrderedDict的原生字符串表示就是OrderedDict([("HP", 10), ("MP", 5), ("STR", 6)]),这种格式根本不是合法的JSON对象,手动替换引号只是治标不治本。
正确的高效写法
直接用json.dump()(写入文件)或者json.dumps()(生成字符串)来序列化你的数据,它们会自动识别OrderedDict并将其转换成合法的JSON对象,同时保留键的顺序,还能自动完成格式化。
示例代码
首先加载数据的部分是对的,保持不变:
from collections import OrderedDict import json # 加载时保持键的顺序 data[player] = json.loads(thisdata, object_pairs_hook=OrderedDict)
然后把你手动拼接的写入代码替换成下面的写法:
# 用with语句自动管理文件,无需手动close with open("testJSON.json", 'w+', encoding='utf-8') as file: # 序列化并写入文件,indent=2实现自动格式化换行 json.dump(jsonObj, file, indent=2, ensure_ascii=False)
为什么这能解决问题?
json.dump()会正确处理OrderedDict,将其序列化为标准的JSON对象,完全保留键的插入顺序indent=2参数会自动帮你完成换行、缩进的格式化,代替你手动判断{}、,的逻辑with语句会自动关闭文件,避免遗漏file.close()导致的问题ensure_ascii=False可以确保非ASCII字符(比如中文)正确写入JSON文件(如果你的数据里有的话)
额外小提示
如果你的Python版本是3.7及以上,其实普通的dict已经默认保持插入顺序了,你甚至可以不用OrderedDict,直接用json.loads(thisdata)加载数据,写入时用json.dump()同样能保留顺序。但如果需要兼容更低版本的Python,OrderedDict还是必要的选择。
内容的提问来源于stack exchange,提问作者Taihouuuuuuuuuuu
相关产品推荐
相关产品推荐

