Seite 1 von 1

JSON auslesen mit Array als Beginn

Verfasst: Freitag 18. Dezember 2020, 11:09
von Domi25
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

Re: JSON auslesen mit Array als Beginn

Verfasst: Samstag 19. Dezember 2020, 12:37
von noisefloor
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

Re: JSON auslesen mit Array als Beginn

Verfasst: Sonntag 20. Dezember 2020, 13:58
von Domi25
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