2017-01-04 4 views
1

Hallo, wenn ich Python lerne wurde ich durch die Frage blockiert, ich habe einige Lösungen auf der Website von bisher keiner von ihnen funktioniert funktioniert. Wenn ich kompiliere, gibt es mir zurück: String-Indizes müssen ganze Zahlen sein. Können Sie mir dabei helfen? Vielen Dank.Python Json Fehler: String-Indizes müssen Ganzzahlen sein

import json 
import urllib 

url = raw_input('Enter location: ') 
uh = urllib.urlopen(url) 
data = uh.read() 

print 'Retrieving', url 
print 'Retrieved', len(data), 'characters' 
info = json.loads(data) 
#print 'User count:', len(info) 
s = 0 

for item in info: 
    print item["comments"]["count"] 

Die URL enthält so etwas wie dieses

{ 
    "note":"This file contains the sample data for testing", 
    "comments":[ 
    { 
     "name":"Romina", 
     "count":97 
    }, 
    { 
     "name":"Laurie", 
     "count":97 
    }, 
    { 
     "name":"Bayli", 
     "count":90 
    }, 
    { 
     "name":"Siyona", 
     "count":90 
    }, 
    { 
     "name":"Taisha", 
     "count":88 
    }, 
    { 
     "name":"Ameelia", 
     "count":87 
    },} 

Antwort

0

Sie print item["comments"][0]["count"] oder print item["comments"][1]["count"] und so weiter verwendet werden soll. Sie sollten den Index des Slice verwenden und dann nach dem "count" Wert aus den Dicts suchen.

Sie können, auch, so etwas wie folgt verwenden:

for item in info["comments"]: 
    print item["count"] 
+1

Vielen Dank! Ich habe es nicht verstanden –

+0

Willkommen. Sie können diese Art von Werten auch auf verschiedene Arten extrahieren. Wenn Sie möchten, kann ich meine Antwort bearbeiten. –

3

Ihre for Schleife, um die Struktur der Daten nicht übereinstimmt.

Try this:

for item in info["comments"]: 
    print item["count"] 

Wenn Sie die Zuordnung von Namen zählt, um zu sehen, versuchen:

for item in info["comments"]: 
    print item["name"], item["count"] 

Wenn Sie die Namen, Grafen und ihren Standort in das sehen wollen Liste, versuchen:

for index, item in enumerate(info["comments"]): 
    print index, item["name"], item["count"] 
+0

Vielen Dank! Es klappt! –

0

Sie durchlaufen jeden Wert in geparste Wörterbuch, dh Ihre item s in info sind

  • "This file contains the sample data for testing"
  • [ { "name":"Romina", "count":97 }, { "name":"Laurie", "count":97 }, { "name":"Bayli", "count":90 }, { "name":"Siyona", "count":90 }, { "name":"Taisha", "count":88 }, { "name":"Ameelia", "count":87 }, ... ]

daher in erster Iteration Sie versuchen ["comments"]["count"] von der tatsächlichen Zeichenfolge zu erhalten.

Wenn Sie möchten, für jedes Kommentare Element zählt drucken, dann sollten Sie lieber: for item in info["comments"]: print item["count"]

Der beste Weg, das Debuggen, nur Interpreter (IPython oder Jupyter Notebooks sind hierfür sehr gut), weisen die Seite zu Variable, oder erstellen Sie sogar einen Schein mit der gleichen Struktur, und dann analysieren Sie es, um die Richtigkeit Ihres Codes zu überprüfen. Hier ist das Problem, wie der Code analysiert wird.

+0

Danke und das ist ziemlich klar –

Verwandte Themen