JSON auslesen mit Array als Beginn

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
Domi25
User
Beiträge: 11
Registriert: Freitag 31. Januar 2020, 12:57
Wohnort: Bamberg

Hey liebe Programmierfreunde,

ich beschäftige mich seit einiger Zeit mit REST-Abfragen und habe normalerweise kein Problem mit dem Auslesen von JSON-Dateien. Bisher haben allerdings alle JSON-Dateien mit einer geschweiften Klammer, also einem Objekt begonnen. In meiner aktuellen Datei ist dies leider nicht der Fall, sondern eine eckige Klammer steht zu Beginn der Datei, also ein Array.

Mein Ziel ist es auf den Wert "card" zuzugreifen, der relativ tief in der Struktur steckt.
Hier der relevante Teil des JSON-Codes:

Code: Alles auswählen

[
    {
        "badges": {
            "attachments": 0,
            "attachmentsByType": {
                "trello": {
                    "board": 0,
                    "card": 0
                }
            },
Ohne das Array zu Beginn würde ich die Anfrage wie folgt gestalten:

Code: Alles auswählen

import requests, json
apiurl = 'https://api.trello.com/1/lists/5fad34db2a62a383a0a1efbd/cards?'
apikey = '21b3a03f56********'
token = '2e307ebd88*********'
payload = {'key': apikey, 'token': token}
my_response = requests.get(apiurl, params=payload)
j_data = json.loads(my_response.text)

for item in j_data['badges']['attachmentsByType']['trello']:
    card = item['card']
    print(card) 
Jetzt habe ich schon unzählige Forenbeiträge durchsucht, aber finde immer nur Lösungen für Arrays innerhalb der Verschachtelung und leider keine Hinweise wie man vorgehen muss, wenn zu Beginn ein Array steht.
In meiner Verzweiflung habe ich schon haufenweise Versuche gestartet, die allerdings immer kläglich gescheitert sind.
Hier sind beispielsweise zwei meiner bisherigen Versuche:

Code: Alles auswählen

card = [w['card'] for w in [0]['badges']['attachmentsByType']['trello']]

Code: Alles auswählen

print([item['badges']['attachmentsByType']['trello']['card'] for item in data['']])
Momentan weiß ich mir leider nicht mehr zu helfen und wäre daher SEHR dankbar um Hinweise wie ich das Problem angehen könnte!

Vielen lieben Dank für Vorschläge und schon mal euch allen eine angenehme Weihnachtszeit! :)

Liebe Grüße Dominik
Benutzeravatar
noisefloor
User
Beiträge: 3857
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das gute ist ja, dass Arrays und Objects von JSON Listen und Dicts in Python entsprechen und man genau so drauf zugreifen kann. Wenn die äußerste Datenstruktur bei JSON ein Array ist, musst du in Python per Index zugreifen:

Code: Alles auswählen

>>> import json
>>> data = '''[
...     {
...         "badges": {
...             "attachments": 0,
...             "attachmentsByType": {
...                 "trello": {
...                     "board": 0,
...                     "card": 0
...                 }
...             }
...         }
...     }
... ]'''
>>> d = json.loads(data)
>>> card = d[0]['badges']['attachmentsByType']['trello']['card']
>>> card
0
>>> 
Gruß, noisefloor
Domi25
User
Beiträge: 11
Registriert: Freitag 31. Januar 2020, 12:57
Wohnort: Bamberg

Hallo noisefloor,

genau danach habe ich verzweifelt gesucht!
Ich habe deinen Code direkt getestet und es funktioniert wunderbar :)
Vielen lieben Dank für deine Hilfe!!

Hab eine tolle Weihnachtszeit und einen guten Rutsch ins neue Jahr!

Beste Grüße
Dominik
Antworten