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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:16:07