请求模块返回带有无序项的json

Jav*_*aSa 8 python python-requests

当我以requests这种方式使用python的模块时:

response = requests.get('http://[some_api_url]') print response.json() 与通过浏览器查看json相反,我获得了不同的json订购.

例如:
通过response.json()我得到:
[{"key2":"value2"},{"key1:"value1"}]

而通过浏览器,我认为它应该是: [{"key1:"value1"},{"key2":"value2"}]

编辑:response.text以正确的顺序打印它但不是json

ste*_*sia 19

您可以object_pairs_hook按照doc中的建议使用json模块的参数:

object_pairs_hook是一个可选函数,将使用有序的对列表对解码的任何对象文字的结果进行调用.将使用object_pairs_hook的返回值而不是dict.此功能可用于实现依赖于键和值对被解码的顺序的自定义解码器(例如,collections.OrderedDict()将记住插入的顺序).如果还定义了object_hook,则object_pairs_hook优先.

import json
from collections import OrderedDict
result = json.loads(request.text,
                    object_pairs_hook=OrderedDict)
Run Code Online (Sandbox Code Playgroud)

为了更简单,您可以在请求实现中看到kwargs从json方法传递到json模块,因此这也适用:

d = response.json(object_pairs_hook=OrderedDict)
Run Code Online (Sandbox Code Playgroud)

并且d将是保留OrderedDict的顺序response.text.

  • 我用`d = response.json(object_pairs_hook = OrderedDict)`验证了第二种方法,它运行得很好. (4认同)