Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python json()是否将第一项移动到末尾?_Python_Json_Python Requests - Fatal编程技术网

Python json()是否将第一项移动到末尾?

Python json()是否将第一项移动到末尾?,python,json,python-requests,Python,Json,Python Requests,答复数据: { “总数”:488, “排名”:[ { “名称”:“ABC”, “类”:8, “规格”:1, “总计”:48801.38671875, “期限”:270381, “开始时间”:1428524959504, “战斗ID”:34, “报告ID”:“9BwMKrNz1VamGQkq”, “公会”:“ABC”, “服务器”:“ABC”, “项目级别”:700 } ] } 在下面的代码中,当通过.json()运行它时,我会在输出的末尾得到“total”,我想这是破坏代码以迭代的原因。 Py

答复数据:

{
“总数”:488,
“排名”:[
{
“名称”:“ABC”,
“类”:8,
“规格”:1,
“总计”:48801.38671875,
“期限”:270381,
“开始时间”:1428524959504,
“战斗ID”:34,
“报告ID”:“9BwMKrNz1VamGQkq”,
“公会”:“ABC”,
“服务器”:“ABC”,
“项目级别”:700
}
]
}
在下面的代码中,当通过
.json()
运行它时,我会在输出的末尾得到“total”,我想这是破坏代码以迭代的原因。 Python2代码:

def wow_rankings():
    response = requests.get("https://www.warcraftlogs.com:443/v1/rankings/encounter/1691?metric=dps&size=20&difficulty=5&region=1&class=8&spec=1&bracket=0&limit=3&page=1&api_key=abc")

    json_data = response.json()
    print json_data #shows the "total" item at the end of the output not front.
    for i in json_data:
        rank_totals = i['total']
        for x in i['rankings']:
            rank_name = x['name']
            rank_class = x['class']
            rank_spec = x['spec']
            rank_total = x['total']
            rank_duration = x['startTime']
            rank_fightID = x['fightID']
            rank_reportID = x['reportID']
            rank_guild = x['guild']
            rank_server = x['server']
            rank_ilevel = x['itemLevel']
            print rank_totals
            print rank_name, rank_class, rank_total, rank_fightID, rank_guild, rank_server, rank_ilevel
我得到:

for x in i['rankings']:
TypeError: string indices must be integers
JSON输出:

{u'rankings': [{u'guild': u'BIZZNO', u'name': u'Kecks', u'fightID': 34, u'itemLevel': 700, u'server': u'Ra
vencrest', u'class': 8, u'reportID': u'9BwMKrNz1VamGQkq', u'startTime': 1428524959504, u'duration': 270381
, u'total': 48801.38671875, u'spec': 1}, {u'guild': u'\u0424\u044c\u044e\u0436\u043d', u'name': u'\u0422\u
044d\u0439\u043a\u0430\u0445\u0445', u'fightID': 8, u'itemLevel': 700, u'server': u'\u0421\u0432\u0435\u04
36\u0435\u0432\u0430\u0442\u0435\u043b\u044c \u0414\u0443\u0448', u'class': 8, u'reportID': u'Lndmj1NzRVwv
tMTg', u'startTime': 1427907142553, u'duration': 280126, u'total': 47983.8828125, u'spec': 1}, {u'guild': 
u'Encore', u'name': u'Yazuki', u'fightID': 14, u'itemLevel': 699, u'server': u'Illidan', u'class': 8, u're
portID': u'z4MC2yjYfBgHNxw1', u'startTime': 1427854657905, u'duration': 266207, u'total': 47540.2109375, u
'spec': 1}], u'total': 488}

我是否应该对请求数据使用
.json()
?这似乎是迭代数据并将其设置为变量的更简单的方法。

这与输出中键的顺序无关;Python字典和JSON对象都是无序的,这意味着您不能依赖于数据结构中键的顺序

你在字典上循环,所以每个键都是
i
。它将绑定到
'total'
'rankings'
,而不是字典。由于字符串是序列,您只能使用整数对其进行索引,因此会显示错误消息<代码>'total'['total']没有什么意义

不要在外部对象上循环。使用:

rank_totals = json_data['total']
print rank_totals
for x in json_data['rankings']:
    rank_name = x['name']
    rank_class = x['class']
    rank_spec = x['spec']
    rank_total = x['total']
    rank_duration = x['startTime']
    rank_fightID = x['fightID']
    rank_reportID = x['reportID']
    rank_guild = x['guild']
    rank_server = x['server']
    rank_ilevel = x['itemLevel']
    print rank_name, rank_class, rank_total, rank_fightID, rank_guild, rank_server, rank_ilevel

在Python字典和JSON对象中,键都没有顺序。别指望有什么秩序。那你为什么在这里兜圈子呢?你没有一个列表,你只有一个字典。可能有多个排名输出,所以我需要对每组进行迭代并获得值,这就是我循环的原因。我几乎也落入了这个陷阱+1这很有效,但后来我发现了unicode错误…UnicodeEncodeError:“ascii”编解码器无法对位置0-6的字符进行编码:序号不在范围(128)内。我发现这是因为像“name”这样的项目可能包含特殊字符。但我不知道如何进行任何转换。我尝试了rank_name=x['name'].encode(utf-8),但也不起作用。@SudoGaron JSON字符串是Unicode值,是的。不过,在这里我们可以找到许多方法,让您在使用Unicode值时遇到错误。错误是否与打印、连接、写入文件或其他完全相关?也许你需要问一个新问题来解决你现在面临的问题。是的,当我在上面设置JSON的值后,正在打印一个rank_名称。我会提出一个新问题,因为谷歌似乎让我失望了,否则我会问它。