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

Python .json() moving first item to end?

响应数据:

{
  "total": 488,
  "rankings": [
    {
      "name": "ABC",
      "class": 8,
      "spec": 1,
      "total": 48801.38671875,
      "duration": 270381,
      "startTime": 1428524959504,
      "fightID": 34,
      "reportID": "9BwMKrNz1VamGQkq",
      "guild": "ABC",
      "server": "ABC",
      "itemLevel": 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