Python:TypeError:解析JSON时,String索引必须是整数

时间:2016-01-17 11:40:27

标签: python python-2.7 parsing

我编写了一个代码来解析以下json内容,但我收到错误消息“TypeError:String indices必须是整数”。enter image description here

import urllib
import json
while True:
    url = raw_input('Enter url: ')
    if len(url) < 1 :break
    info = json.loads(urllib.urlopen(url).read())
    counts = 0
    total = 0
    print info
    for value in info:
        if value['count']:
            e = value['count']
            for value in e.itervalues():
                print value

JSON

   {
  "comments":[
    {
      "name":"Leven",
      "count":100
    },
    {
      "name":"Mahdiya",
      "count":97
    },
    {
      "name":"Ajayraj",
      "count":87
    },
    {
      "name":"Lillian",
      "count":86
    },
    {
      "name":"Aon",
      "count":86
    },
    {
      "name":"Ruaraidh",
      "count":78
    },
    {
      "name":"Gursees",
      "count":75
    },
    {
      "name":"Emmanuel",
      "count":74
    },
    {
      "name":"Christy",
      "count":72
    },
    {
      "name":"Annoushka",
      "count":72
    },
    {
      "name":"Inara",
      "count":72
    },
    {
      "name":"Caite",
      "count":70
    },
    {
      "name":"Rosangel",
      "count":70
    },
    {
      "name":"Iana",
      "count":66
    },
    {
      "name":"Anise",
      "count":66
    },
    {
      "name":"Jaosha",
      "count":65
    },
    {
      "name":"Cadyn",
      "count":65
    },
    {
      "name":"Edward",
      "count":63
    },
    {
      "name":"Charlotte",
      "count":61
    },
    {
      "name":"Sammy",
      "count":60
    },
    {
      "name":"Zarran",
      "count":60
    },
    {
      "name":"Rowen",
      "count":59
    },
    {
      "name":"Stanislaw",
      "count":59
    },
    {
      "name":"Maighdlin",
      "count":57
    },
    {
      "name":"Connan",
      "count":56
    },
    {
      "name":"Warrick",
      "count":54
    },
    {
      "name":"Diya",
      "count":52
    },
    {
      "name":"Lawson",
      "count":52
    },
    {
      "name":"Wu",
      "count":51
    },
    {
      "name":"Irmak",
      "count":47
    },
    {
      "name":"Emilija",
      "count":47
    },
    {
      "name":"Kayda",
      "count":41
    },
    {
      "name":"Ellenor",
      "count":41
    },
    {
      "name":"Kyra",
      "count":41
    },
    {
      "name":"Nikita",
      "count":38
    },
    {
      "name":"Kaelah",
      "count":35
    },
    {
      "name":"Meko",
      "count":32
    },
    {
      "name":"Marissa",
      "count":31
    },
    {
      "name":"Ayat",
      "count":24
    },
    {
      "name":"Sali",
      "count":19
    },
    {
      "name":"Hashem",
      "count":19
    },
    {
      "name":"Tygan",
      "count":18
    },
    {
      "name":"Rioden",
      "count":17
    },
    {
      "name":"Cruiz",
      "count":16
    },
    {
      "name":"Caoilfinn",
      "count":13
    },
    {
      "name":"Ewen",
      "count":8
    },
    {
      "name":"Baighley",
      "count":7
    },
    {
      "name":"Ramone",
      "count":1
    },
    {
      "name":"Kyran",
      "count":1
    },
    {
      "name":"Noelani",
      "count":1
    }
  ]
}

告诉我一种方法来添加计数(Json内容)中的所有值

2 个答案:

答案 0 :(得分:1)

您需要遍历JSON对象的"comments"项中的字典列表。我将使用您的数据的简短版本来说明。

info = {
    'comments':[
        {'count': 100, 'name': 'Leven'},
        {'count': 97, 'name': 'Mahdiya'},
        {'count': 87, 'name': 'Ajayraj'},
        {'count': 86, 'name': 'Lillian'},
        {'count': 86, 'name': 'Aon'},
        {'count': 78, 'name': 'Ruaraidh'},
        {'count': 75, 'name': 'Gursees'},
        {'count': 74, 'name': 'Emmanuel'},
        {'count': 72, 'name': 'Christy'},
        {'count': 72, 'name': 'Annoushka'},
        {'count': 72, 'name': 'Inara'},
    ]
}

total = 0
for d in info['comments']:
    name, count = d['name'], d['count']
    total += count
    print name, count, total
print total

<强>输出

Leven 100 100
Mahdiya 97 197
Ajayraj 87 284
Lillian 86 370
Aon 86 456
Ruaraidh 78 534
Gursees 75 609
Emmanuel 74 683
Christy 72 755
Annoushka 72 827
Inara 72 899
899

答案 1 :(得分:1)

它要求一个整数,因为JSON数据是包含字典列表的字典。查看“值”(打印值)的格式。您将看到count是列表的成员。要调用列表的特定成员,可以通过索引号(整数)而不是字符串来调用它。以下是json.loads()之后的数据结构示例:

{u'comments': [{u'count': 100, u'name': u'Leven'}, {u'count': 97, u'name': u'Mahdiya'}, {u'count': 87, u'name': u'Ajayraj'}, {u'count': 86, u'name': u'Lillian'}, {u'count': 86, u'name': u'Aon'}, {u'count': 78, u'name': u'Ruaraidh'}, {u'count': 75, u'name': u'Gursees'}, {u'count': 74, u'name': u'Emmanuel'}, {u'count': 72, u'name': u'Christy'}, {u'count': 72, u'name': u'Annoushka'}, {u'count': 72, u'name': u'Inara'}, {u'count': 70, u'name': u'Caite'}, {u'count': 70, u'name': u'Rosangel'}, {u'count': 66, u'name': u'Iana'}, {u'count': 66, u'name': u'Anise'}, {u'count': 65, u'name': u'Jaosha'}, {u'count': 65, u'name': u'Cadyn'}, {u'count': 63, u'name': u'Edward'}, {u'count': 61, u'name': u'Charlotte'}, {u'count': 60, u'name': u'Sammy'}, {u'count': 60, u'name': u'Zarran'}, {u'count': 59, u'name': u'Rowen'}, {u'count': 59, u'name': u'Stanislaw'}, {u'count': 57, u'name': u'Maighdlin'}, {u'count': 56, u'name': u'Connan'}, {u'count': 54, u'name': u'Warrick'}, {u'count': 52, u'name': u'Diya'}, {u'count': 52, u'name': u'Lawson'}, {u'count': 51, u'name': u'Wu'}, {u'count': 47, u'name': u'Irmak'}, {u'count': 47, u'name': u'Emilija'}, {u'count': 41, u'name': u'Kayda'}, {u'count': 41, u'name': u'Ellenor'}, {u'count': 41, u'name': u'Kyra'}, {u'count': 38, u'name': u'Nikita'}, {u'count': 35, u'name': u'Kaelah'}, {u'count': 32, u'name': u'Meko'}, {u'count': 31, u'name': u'Marissa'}, {u'count': 24, u'name': u'Ayat'}, {u'count': 19, u'name': u'Sali'}, {u'count': 19, u'name': u'Hashem'}, {u'count': 18, u'name': u'Tygan'}, {u'count': 17, u'name': u'Rioden'}, {u'count': 16, u'name': u'Cruiz'}, {u'count': 13, u'name': u'Caoilfinn'}, {u'count': 8, u'name': u'Ewen'}, {u'count': 7, u'name': u'Baighley'}, {u'count': 1, u'name': u'Ramone'}, {u'count': 1, u'name': u'Kyran'}, {u'count': 1, u'name': u'Noelani'}]}

您将看到计数位于列表中的第一个项目中。您需要访问该列表,然后访问该词典的计数键。