我注意到python3的json.dumps实现中有一些奇怪的行为,即每次将同一个对象从一个执行转储到另一个执行时,键顺序都会发生变化。google没用,因为我不在乎把钥匙分类,我只想让它们保持原样!下面是一个示例脚本:import json
data = {
'number': 42,
'name': 'John Doe',
'email': 'john.doe@example.com',
'balance': 235.03,
'isadmin': False,
'groceries': [
'apples',
'bananas',
'pears',
],
'nested': {
'complex': True,
'value': 2153.23412
}
}
print(json.dumps(data, indent=2))
运行此脚本时,每次都会得到不同的输出,例如:
^{pr2}$
但当我再次运行它时,我得到:$ python print_data.py
{
"email": "john.doe@example.com",
"balance": 235.03,
"name": "John Doe",
"nested": {
"value": 2153.23412,
"complex": true
},
"isadmin": false,
"groceries": [
"apples",
"bananas",
"pears"
],
"number": 42
}
我知道字典是无序的集合,其顺序是基于散列函数的;但是在Python2中,顺序(不管是什么)是固定的,不会因每次执行而改变。这里的困难在于它使我的测试难以运行,因为我需要比较两个不同模块的JSON输出!在
知道发生什么事了吗?如何修复?注意,我不想使用OrderedDict或执行任何排序,重要的是字符串表示在执行之间保持不变。同样,这只是为了测试目的,对我的模块的实现没有任何影响。在