data response string verarbeiten, kürzen, sortieren, filtern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
tkbah
User
Beiträge: 10
Registriert: Mittwoch 11. Juli 2012, 14:47

Hallo Leute,

Ich beschäftige mich schon seit 3 Wochen mit Python. Es macht mir auch jede menge spaß hab mir ein kleines program geschrieben wo mir ein paar Daten von einer Website abfragt. Nun habe ich folgende frage:

Da ich nur die Daten von der gesamten Webseite bekomme, wollte ich nun gerne die Daten von denn einzelnen Seiten heraus bekommen(Filtern):

Der string zum Filtern sieht so aus:

Code: Alles auswählen

[{"count":175,"query":"id=45gh74512a56","path":"45gh74512a56","lable":"site1","type":{"fact":"id","level":0}},{"count":6890,"query":"id=hj76rt3354t89","path":"hj76rt3354t89","lable":"site2","type":{"fact":"id","level":0}}]
Ich habe es schon mit

Code: Alles auswählen

list, tuple, dict und string
versucht.. bekomme aber nicht mein gewünschtes ergebnis. An regex hab ich mich versucht weis aber noch nicht genau wie es funktioniert.
Ich wollte mir das so ausgeben lassen das ich nur denn string hinter path: bekomme und der rest einfach weggeschnitten wird.
also 45gh74512a56 oder das hj76rt3354t89 so das man es filtern kann.

Ich weis das soviel schon darüber geschrieben wurde, aber ich finde einfach nicht bzw ich suche falsch.

Weis einer rat?

Greets TK
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

tkbah
User
Beiträge: 10
Registriert: Mittwoch 11. Juli 2012, 14:47

Hi,

ja das wollte ich grad dazu schreiben,
wenn ich als loads geben oder load findet er diesen string nicht und dann kommt:

Code: Alles auswählen

 jdata2 = json.loads(jdata["query"])
TypeError: list indices must be integers, not str
Greets TK
deets

das Problem ist was auch immer du in jdata hast - das ist eine Liste, aber du greifst per String-Schluessel darauf zu. Das geht natuerlich nicht - du musst 0 oder 1 verwenden.
tkbah
User
Beiträge: 10
Registriert: Mittwoch 11. Juli 2012, 14:47

In jdata2 steht :

Code: Alles auswählen

 jdata2 = [{"count":175,"query":"id=45gh74512a56","path":"45gh74512a56","lable":"site1","type":{"fact":"id","level":0}},{"count":6890,"query":"id=hj76rt3354t89","path":"hj76rt3354t89","lable":"site2","type":{"fact":"id","level":0}}] 
ich find es nur komisch das bei nem anderen json string klappt nur bei dem nicht..

Greets TK
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Weil das kein String ist, sondern eine Liste von Dictionaries und eben nicht mehr JSON kodiert.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Wie du siehst sind die eigentlichen Daten in einer Liste gekapselt um also an count zu kommen.

Code: Alles auswählen

jdata2 = [{"count":175,"query":"id=45gh74512a56","path":"45gh74512a56","lable":"site1","type":{"fact":"id","level":0}},{"count":6890,"query":"id=hj76rt3354t89","path":"hj76rt3354t89","lable":"site2","type":{"fact":"id","level":0}}]

len(jdata2)
Out[2]: 2

jdata2[0]["count"]
Out[3]: 175

jdata2[1]["count"]
Out[4]: 6890
tkbah
User
Beiträge: 10
Registriert: Mittwoch 11. Juli 2012, 14:47

Vielen Dank, das hat mir geholfen..

jetzt klappt es wunderbar

Danke, Danke, Danke


Greets TK
Antworten