Python 请求模块返回json,其中项未排序
当我以这种方式使用python的Python 请求模块返回json,其中项未排序,python,python-requests,Python,Python Requests,当我以这种方式使用python的请求模块时: response=requests.get('http://[some\u api\u url]”) print response.json() 与通过浏览器查看json相反,我得到了不同的json顺序 例如: 通过response.json()我得到: [{“key2”:“value2”},{“key1:“value1”}] 而通过浏览器,我认为它应该是: [{“key1:value1”},{“key2”:“value2”}] 编辑:打印响应时。
请求
模块时:
response=requests.get('http://[some\u api\u url]”)
print response.json()
与通过浏览器查看json相反,我得到了不同的json顺序
例如:通过response.json()我得到:
[{“key2”:“value2”},{“key1:“value1”}]
而通过浏览器,我认为它应该是:
[{“key1:value1”},{“key2”:“value2”}]
编辑:打印响应时。文本的顺序正确
但不是json您可以使用json模块的object\u pairs\u hook
参数,如下所示:
object_pairs_hook是一个可选函数,它将通过对有序的对象列表进行解码的任何对象文本的结果来调用。将使用object_pairs_hook的返回值而不是dict。此功能可用于实现依赖于键和值对解码顺序的自定义解码器(例如,collections.orderedict()将记住插入顺序)。如果还定义了object_hook,则object_pairs_hook具有优先级
为了更简单,您可以在中看到KWARG是从json方法传递到json模块的,因此也可以这样做:
d = response.json(object_pairs_hook=OrderedDict)
而d
将是一个OrderedDict
,其顺序为响应。保留文本 你能发布这个url吗?不幸的是,它不是公开的url。我通常使用:json.loads(response.text parse\u float=float,object\u pairs\u hook=orderedict)
和来自集合的orderedict
@stellasia:谢谢,我自己找到了这个解决方案,但是有办法使用requests.json()吗以有序的方式?在CPython 3.6 a中,这种行为没有得到语言的保证。从Python3.7开始,现在已经保证了这一点。这应该可以避免显式使用orderedict
。我用d=response.json(object\u pairs\u hook=orderedict)
验证了第二种方法,效果非常好。请将object\u parir\u hook更改为object\u pairs\u hookWow这非常有用。不知道没有这个我怎么过了这么久。谢谢你,先生!
d = response.json(object_pairs_hook=OrderedDict)