json.dumps弄乱顺序 - python

我正在使用json module创建一个包含类似条目的json文件

json.dumps({"fields": { "name": "%s", "city": "%s", "status": "%s", "country": "%s" }})

但是,在创建的json文件中,字段顺序错误

{"fields": {"status": "%s", "city": "%s", "name": "%s", "country": "%s"}}

这是一个问题,因为%s字符串的替换现在不正确。

如何强制dumps函数保持给定顺序?

参考方案

像其他答案正确指出的那样,在Python 3.6之前,字典是无序的。

就是说,JSON is also supposed to have unordered mappings,所以原则上在JSON中存储有序字典没有多大意义。具体来说,这意味着在读取JSON对象时,返回键的顺序可以是任意的。

因此,在JSON中保留映射顺序(例如Python OrderedDict)的一种好方法是输出一个(键,值)对的数组,您在读取时将它们转换回有序映射:

>>> from collections import OrderedDict
>>> import json
>>> d = OrderedDict([(1, 10), (2, 20)])                                         
>>> print d[2]
20
>>> json_format = json.dumps(d.items())                   
>>> print json_format  # Order maintained
[[1, 10], [2, 20]]
>>> OrderedDict(json.loads(json_format))  # Reading from JSON: works!
OrderedDict([(1, 10), (2, 20)])
>>> _[2]  # This works!
20

(请注意,从(键,值)对列表构造有序字典的方式:OrderedDict({1: 10, 2: 20})不起作用:它的键不一定像字典文字中那样是有序的,因为该文字创建了一个Python字典,其字典是无序的)

PS:从Python 3.1开始,json模块offers a hook用于将成对的列表(如上)自动转换为诸如OrderedDict之类的其他内容。

JSON SCHEMA PATTERN逗号分隔列表 - python

我的json模式中具有以下模式,并且我需要根据以下模式包含逗号分隔的值。当前模式只能像DV2一样处理一种模式所以我应该如何修改我的模式以包括多个字符串,如下所示,但它应该与声明的模式匹配。例如:“ DV2”,“ DEV1”,“ DEV3”,“ ST”, "ENVIRONMENT": { "type": "st…

如何在python中将从PDF提取的文本格式化为json - python

我已经使用pyPDF2提取了一些文本格式的发票PDF。我想将此文本文件转换为仅包含重要关键字和令牌的json文件。输出应该是这样的:#PurchaseOrder {"doctype":"PO", "orderingcompany":"Demo Company", "su…

Python中的Json操作 - python

Latest_json和Historic_json函数返回:return(frame.to_json(orient='records')) 主功能:recentdata = recent_json(station) historicdata = historic_json(station) alldata = historicdata +…

根据字段名称和值从JSON中选择字段 - python

在python中,我从API调用中获取了JSON。resp = requests.get(url) resp.json() 我将使用我的MySQL词汇表。我得到的这个对象很大,结构不规则(并非所有字段都可用于每个条目)。因此,我想在此JSON中选择一些字段和一些基于值的条目。假设JSON返回用户的个人资料,其中包含字段"name",�…

Python-熊猫描述了抛出错误:无法散列的类型“ dict” - python

更新:我正在使用“ Socrata开源API”中的一些示例代码。我在代码中注意到以下注释:# First 2000 results, returned as JSON from API / converted to Python # list of dictionaries by sodapy. 我不熟悉JSON。我已经下载了一个数据集,并创建了一个包含大量…