Wie bekomme ich JSON-Keys als Spaltename in eine CSV?

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
Christopher90
User
Beiträge: 4
Registriert: Sonntag 17. September 2023, 14:09

Ich habe den folgenden Code:

Code: Alles auswählen

import requests
import pandas

api_url = "***"
Headers = { "Authorization" : "***" }
response = requests.get(api_url, headers=Headers)

obj = pandas.read_json(response.text, orient='values')
obj.to_csv('output1.csv')
und erhalte das folgende Ergebnis als CSV:

gelöscht wegen sensibler Inhalte
Die Spalten B und C usw. sind leer. Ich möchte aber, dass die JSON-Keys zu den Überschriften der Spalten werden und die Values unter den Spalten stehen. Wie geht das?
Sirius3
User
Beiträge: 18226
Registriert: Sonntag 21. Oktober 2012, 17:20

Man kann nicht einfach beliebige JSON-Konstrukte per read_json einlesen und dann hoffen, dass alles magisch funktioniert.
Du mußt halt die Rückgabe deiner URL passend aufbereiten, so dass das wirklich eine Tabellarische Struktur hat.
Christopher90
User
Beiträge: 4
Registriert: Sonntag 17. September 2023, 14:09

Wie kann ich die Rückage aufarbeiten? print(response.json()) sieht wie folgt aus:

Gelöscht wegen sensibler Inhalte
Benutzeravatar
noisefloor
User
Beiträge: 4157
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn du JSON in Python einliest wird das in eine Python-Datenstruktur umgewandelt. In deinem Falle sollte das ein Dict werden. Da kannst du dann mit den bekannten Bordmitteln drauf zugreifen und dir die Werte ziehen, die du brauchst. Was auch immer das ist. Die Struktur, die du hast, ist ja verschachtelt. Der Schlüssel "value" hat als Wert eine Liste (bzw. in JSON einen Array) und der wiederum einhält weiter verschachtelte Dicts (bzw. JSON Objekte). Aufgrund der Verschachtelung kannst du das eigentlich nicht direkt in eine 2D Datenstruktur wie eine Tabelle (die in eine CSV exportiertbar ist) umwandeln, ohne vorher die Struktur flacher zu machen.

Kannst du die Struktur deines JSON-Response?

NACHTRAG: dir ist bewusst, dass du funktionierende Links u.a. auf den Volkswagen Financial Service gepostet hast? Und wenn man einem Login hat man dem Link weiter folgen kann? Könnte im schlechtesten Fall als Angriffsvektor von Leuten genutzt werden, die das Netz genau nach solchen Links scannen.

Gruß, noisefloor
Christopher90
User
Beiträge: 4
Registriert: Sonntag 17. September 2023, 14:09

Ist der Output von print(response.json()) den ich zuvor gepostet habe nicht schon die Struktur meiner JSON-Response?
Benutzeravatar
noisefloor
User
Beiträge: 4157
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Ja, ist sie. Und die ist halt verschachtelt. Das muss du für dich aufdröseln. Weil nur du weißt ja, welche Werte am Ende in deiner CSV-Datei landen sollen.

Gruß, noisefloor
Christopher90
User
Beiträge: 4
Registriert: Sonntag 17. September 2023, 14:09

Wie genau soll ich die denn aufdröseln so das die JSON-Keys zu Column-Names werden? Sry habe noch nicht viel mit Python gemacht.
Sirius3
User
Beiträge: 18226
Registriert: Sonntag 21. Oktober 2012, 17:20

Es gehört zu den absoluten Grundlagen, wie man mit Listen und Wörterbüchern in Python arbeitet.
Arbeite ein Anfängertutorial durch, dann lernst Du, wie das geht.
Benutzeravatar
noisefloor
User
Beiträge: 4157
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Wie genau soll ich die denn aufdröseln so das die JSON-Keys zu Column-Names werden?
Genau das meinte ich mit meiner Frage, ob die Struktur der JSON-Antwort kennst / verstanden hast. Wenn du nicht siehst / verstehst / nachlesen kannst, wie das JSON aufgebaut ist, kann du es auch nicht weiterverarbeiten.

Und wie gesagt: die Struktur hat X Verschachtelungen (muss du halt mal analysieren), d.h. die Antwort direkt sinnvoll in eine 2-dimensionale Tabelle / CSV-Datei überführen geht _nicht_.

Gruß, noisefloor
Antworten