转换为json会对python中的对象重新排序

2024-09-30 14:25:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用请求从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.textr.json()返回顺序不同的对象。 例如,在“rgInventory”中,.text中的前3"ids":925, 658, 891结尾,而在.json()中以891, 619, 741结束(只是它们在下降的共相关)。在

json.loads(r.text)产生相同的结果

如何使json对象与.text显示的顺序相同?在


Tags: 对象textimportcomjsonhttpurlget
3条回答

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

import collections, json
data = json.loads(response_string, object_pairs_hook=collections.OrderedDict)

r.json()将关键字参数传递给json.loads,因此它应该支持相同的参数:

^{pr2}$

相关问题 更多 >