json.dump()在Windows和Linux上的不同行为

时间:2017-06-30 12:16:05

标签: python json linux windows python-requests

我编写了一个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中保存的顺序相同。我如何保留此顺序?

1 个答案:

答案 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优先。