簡體   English   中英

Python:TypeError:解析JSON時,字符串索引必須為整數

[英]Python: TypeError: String indices must be integers while parsing JSON

我已經編寫了代碼來解析以下json內容,但是卻收到錯誤消息,提示為“ TypeError:字符串索引必須為整數”。 在此處輸入圖片說明

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內容)

您需要遍歷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

它要求一個整數,因為JSON數據是一個包含字典列表的字典。 查看“值”(打印值)的格式。 您會看到該計數是列表的成員。 要調用列表的特定成員,請通過索引號(整數)而不是字符串來調用它。 這是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'}]}

您會看到count在字典中,它是列表中的第一項。 您需要訪問該列表,然后訪問該詞典的計數鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM