【发布时间】:2015-05-15 22:34:01
【问题描述】:
我正在尝试使用请求在 python 中从http://steamcommunity.com/profiles/76561198081591043/inventory/json/730/2 获得响应。
import requests
url = "http://steamcommunity.com/profiles/76561198081591043/inventory/json/730/2"
r = requests.get(url)
print r.text
print r.json()
r.text 和 r.json() 返回排序不同的对象。
例如,在“rgInventory”中,.text 中的前 3 个 "ids": 以 925, 658, 891 结尾,但在 .json() 中以 891, 619, 741 结尾(只是巧合,它们正在下降)。
json.loads(r.text) 产生相同的结果
如何让json 对象与.text 显示的顺序相同?
【问题讨论】:
-
你没有。 JSON 对象映射到 Python 字典,它们本质上是无序的。
-
与其说是“无序”,不如说是“任意排序”:项目的顺序是根据散列函数确定的,这取决于你对 Python 的特殊风格,不应依赖它。有什么理由必须完全按照正文中的顺序排列吗?
-
我不明白无序部分,如果我使用 iteritems() 循环遍历对象 (r['rgInventory'][i]['id'] 并打印它,我会总是让它们以相同的顺序返回,如打印所示
-
正如@oxymor0n 解释的那样,它们是 有序的,只是它以任意方式由Python 的字典内部确定(您无法更改)。一种解决方法是将 JSON 对象映射到
OrderedDicts,而不是像 user2357112 的 answer below 建议的那样 - 尽管根据您要完成的任务,这样做可能是不必要的。
标签: python json python-requests steam steam-web-api