我试图使用请求从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对象不是按照javascript(Does JavaScript Guarantee Object Property Order?)的定义排序的。要获得所需的结果,必须按键对结果字典进行排序:How can I sort a dictionary by key?
JSON对象中字段的顺序显式无意义,无需保留。为了提高效率,许多实现都是哈希表。在
如果JSON的顺序很重要,那么必须使用数组。在这种情况下,最简单的模型可能是一个包含两个元素数组的数组,每个元素数组又包含一个字符串名称和一个值。在
另一种解决方案是使用非JSON字符串处理代码将JSON对象字段转换回您的首选顺序。不推荐!在
抱歉,但是规范没有识别出的区别根本就不是区别。在
这可能是不必要的,如果有必要的话,您的代码或Steam API将被破坏。从你的评论来看,这可能是没有必要的。也就是说,这是可行的。在
json.loads
接受可选的object_pairs_hook
参数。这指定一个函数,该函数将使用键值对列表来调用,以解码对象文本。默认值相当于指定object_pairs_hook=dict
;要保持密钥在原始文本中出现的顺序,可以使用object_pairs_hook=collections.OrderedDict
:
^{pr2}$r.json()
将关键字参数传递给json.loads
,因此它应该支持相同的参数:相关问题 更多 >
编程相关推荐