我编写了一个python脚本,使用请求库以json格式从网站检索数据,然后将其转储到json文件中。我已经使用这些数据编写了大量代码,并且仅在Windows中进行了测试。最近我转移到Linux系统,当执行相同的python脚本时,json文件中的键的顺序完全不同。
这是我正在使用的代码:
API_request = requests.get('https://www.abcd.com/datarequest')
alertJson_Data = API_request.json() # To convert returned data to json
json.dump(alertJson_Data, jsonDataFile) # for adding the json data for the alert to the file
jsonDataFile.write('\n')
jsonDataFile.close()
我的很多其他脚本都依赖于这个json文件中键的顺序,所以有没有办法维护Windows中使用的相同顺序以便在Linux中使用?
例如,在Windows中,顺序为"id":, "src":, "dest":,
,而在Linux中则完全不同。如果我直接转到浏览器上的Web链接,它的顺序与Windows中保存的顺序相同。我如何保留此顺序?
答案 0 :(得分:1)
加载json
时可以使用collections.OrderedDict
吗?
e.g
from collections import OrderedDict
alertJson_Data = API_request.json(object_pairs_hook=OrderedDict)
应该有效,因为在请求上实现的json()
方法采用与json.loads
相同的可选参数
JSON(** kwargs)
返回响应的json编码内容(如果有)。 参数** kwargs - json.loads 采用的可选参数。加薪 ValueError - 如果响应主体不包含有效的json。
json.loads
的文件指明:
object_hook,如果指定,将使用every的结果调用 解码JSON对象并使用其返回值代替 给定字典。这可用于提供自定义反序列化(例如, 支持JSON-RPC类提示)。
object_pairs_hook,如果指定将被调用,结果为 每个JSON对象使用有序的对列表进行解码。回报 将使用object_pairs_hook的值而不是dict。这个 功能可用于实现依赖于的自定义解码器 命令键和值对被解码(例如, collections.OrderedDict()将记住插入顺序)。如果 object_hook也被定义,object_pairs_hook优先。