Bevor Sie urteilen und denken Sie sich 'Ich habe diese Frage tausend Mal gesehen' bitte lesen Sie weiter und geben Sie mir eine Chance, ich habe das Internet für Antworten, aber scheint keine Hilfe zu finden.TypeError: String-Indizes müssen integer Fehler sein, wenn Json mit Python analysiert
Also ich versuche json von einem API zu analysieren, die ich den folgenden Code obtain mit:
url = 'https://api.companieshouse.gov.uk/company/' + companyno + '/charges'
r = requests.get(url, auth=('API KEY', ''))
data = r.json()
ich einfach ziemlich spezifische Werte aus der json erhalten kann, zum Beispiel mit diesem Code:
for each in data['items']:
print(each['created_on'])
, die zurückgibt:
2016-11-08
2016-11-08
2016-11-08
2015-03-27
2015-03-27
2015-03-27
2015-03-27
2015-03-27
2007-10-10
2007-09-28
2007-09-19
Und das ist genau das, was ich will, es funktioniert für andere Schlüssel zu.
Allerdings gibt es ein Bit des JSON, auf das ich anscheinend nicht zugreifen kann, ich habe das JSON leicht bearbeitet, um die Veröffentlichung sensibler Daten zu vermeiden (die sowieso öffentlich zugänglich sind, aber vorsichtig sein) weitgehend unverändert ist:
{
'items':[
{
'created_on':'2016-11-08',
'etag':'DELETED',
'classification':{
'type':'charge-description',
'description':'A registered charge'
},
'particulars':{
'contains_negative_pledge':True,
'description':'DELETED',
'type':'brief-description'
},
'transactions':[
{
'links':{
'filing':'DELETED'
},
'filing_type':'create-charge-with-deed',
'delivered_on':'2016-11-21'
}
],
'links':{
'self':'DELETED'
},
'charge_code':'DELETED',
'delivered_on':'2016-11-21',
'status':'outstanding',
'persons_entitled':[
{
'name':'DELETED'
},
{
'name':'DELETED'
}
],
'charge_number':59
},
{
'transactions':[
{
'delivered_on':'2016-11-10',
'links':{
'filing':'DELETED'
},
'filing_type':'create-charge-with-deed'
}
],
'particulars':{
'contains_negative_pledge':True,
'contains_fixed_charge':True,
'floating_charge_covers_all':True,
'contains_floating_charge':True
},
'persons_entitled':[
{
'name':'DELETED'
}
],
'charge_number':58,
'status':'outstanding',
'charge_code':'DELETED',
'links':{
'self':'DELETED'
},
es ist die [Artikel, Links, Selbst] Daten
Wenn ich den folgenden Code verwenden, um zu versuchen und darauf zugreifen:
for each in data['items']['links']:
print(each['self'])
Ich erhalte die folgenden Fehler:
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers or slices, not str
Und wenn ich versuche, darauf zuzugreifen mit dem folgenden Code:
for each in data['items'][0]['links']:
print(each['self'])
ich diesen Fehler:
File "<stdin>", line 2, in <module>
TypeError: string indices must be integers
Ich kann nicht nur verstehen, warum Es wirft diesen Fehler auf mich, alle anderen Antworten im Internet zeigen auf die Tatsache, dass ich versuche, eine Zeichenfolge und nicht ein tatsächliches Json-Objekt zu analysieren, aber immer wenn ich den Befehl ausführen:
type(data)
es zurück:
<class 'dict'>
So weiß ich, es ist ein Wörterbuch ist und dass sie über die Tasten zu durchlaufen können.
Ich bin mir sicher, dass ich einen sehr dummen Fehler mache und wenn ja, entschuldige ich mich, aber ich kann einfach nicht herausfinden, was ich falsch mache, kann jemand helfen?
p.s. Entschuldigung für die lange Post.
EDIT:
Vielen Dank für Ihre Antworten, scheinen die Dinge Sinn, jetzt zu machen. Wir waren alle Lernenden an einem Punkt! :)
Können Sie eine Arbeits json schreiben ? Die von Ihnen gepostete scheint unvollständig, so dass es schwer ist, es zu testen. – 098799