import Jsondata = { '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))
当我运行此脚本时,每次都会得到不同的输出,例如:
$python print_data.py { "grocerIEs": [ "apples","bananas","pears" ],"isadmin": false,"nested": { "value": 2153.23412,"complex": true },"email": "john.doe@example.com","number": 42,"name": "John Doe","balance": 235.03}
但后来我再次运行它,我得到:
$python print_data.py { "email": "john.doe@example.com","balance": 235.03,"grocerIEs": [ "apples","number": 42}
我知道字典是无序集合,并且顺序基于散列函数;但是在Python 2中 – 顺序(无论它是什么)是固定的,并且不会在每次执行的基础上改变.这里的困难在于它使我的测试难以运行,因为我需要比较两个不同模块的JsON输出!
知道发生了什么事吗?怎么解决?请注意,我想避免使用OrderedDict或执行任何排序,重要的是字符串表示在执行之间保持不变.此外,这仅用于测试目的,对我的模块的实现没有任何影响.
解决方法 Python字典和JsON对象是无序的.你可以让Json.dumps()对输出中的键进行排序;这是为了方便测试.将sort_keys参数用于True:print(Json.dumps(data,indent=2,sort_keys=True))
请参阅Why is the order in Python dictionaries and sets arbitrary?,了解每次看到不同订单的原因.
您可以将PYTHONHASHSEED
environment variable设置为整数值以“锁定”字典顺序;使用它只运行测试而不是生产,因为哈希随机化的重点是防止攻击者轻易地对你的程序进行DOS *** 作.
以上是内存溢出为你收集整理的如何使用Python 3 json.dumps修复JSON密钥顺序?全部内容,希望文章能够帮你解决如何使用Python 3 json.dumps修复JSON密钥顺序?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)