JSON-Beispiel

JSON (kurz für JavaScript Object Notation) hat sich zu einem der Standardformate für die Übermittlung von Daten per HTTP-Anfrage zwischen Webbrowsern und anderen Anwendungen entwickelt. Hier ist ein Beispiel:

JSON ähnelt Python-Code, mit Ausnahme des Nullwerts null und dem Verbot von Kommas am Ende von Listen. Die Grundtypen sind Objekte (Dicts), Arrays (Listen), Zeichenketten, Zahlen, Boolesche Werte und null. Alle Schlüssel eines Objekts müssen Zeichenketten sein. Es gibt mehrere Python-Bibliotheken zum Lesen und Schreiben von JSON-Daten. Ich werde hier json aus der Python-Standardbibliothek verwenden. Um einen JSON-String in die Python-Form zu konvertieren, verwende ich json.loads:

[1]:
>>> import json


f = open("books.json")
data = json.load(f)

for i in data:
    print(i)
{'Titel': 'Python basics', 'Sprache': 'en', 'Autor*innen': 'Veit Schiele', 'Lizenz': 'BSD-3-Clause', 'Veröffentlichungsdatum': '2021-10-28'}
{'Titel': 'Jupyter Tutorial', 'Sprache': 'en', 'Autor*innen': 'Veit Schiele', 'Lizenz': 'BSD-3-Clause', 'Veröffentlichungsdatum': '2019-06-27'}
{'Titel': 'Jupyter Tutorial', 'Sprache': 'de', 'Autor*innen': 'Veit Schiele', 'Lizenz': 'BSD-3-Clause', 'Veröffentlichungsdatum': '2020-10-26'}
{'Titel': 'PyViz Tutorial', 'Sprache': 'en', 'Autor*innen': 'Veit Schiele', 'Lizenz': 'BSD-3-Clause', 'Veröffentlichungsdatum': '2020-04-13'}

json.dumps hingegen konvertiert ein Python-Objekt zurück nach JSON:

[2]:
json.dumps(data)
[2]:
'[{"Titel": "Python basics", "Sprache": "en", "Autor*innen": "Veit Schiele", "Lizenz": "BSD-3-Clause", "Ver\\u00f6ffentlichungsdatum": "2021-10-28"}, {"Titel": "Jupyter Tutorial", "Sprache": "en", "Autor*innen": "Veit Schiele", "Lizenz": "BSD-3-Clause", "Ver\\u00f6ffentlichungsdatum": "2019-06-27"}, {"Titel": "Jupyter Tutorial", "Sprache": "de", "Autor*innen": "Veit Schiele", "Lizenz": "BSD-3-Clause", "Ver\\u00f6ffentlichungsdatum": "2020-10-26"}, {"Titel": "PyViz Tutorial", "Sprache": "en", "Autor*innen": "Veit Schiele", "Lizenz": "BSD-3-Clause", "Ver\\u00f6ffentlichungsdatum": "2020-04-13"}]'

Wie ihr ein JSON-Objekt oder eine Liste von Objekten in einen DataFrame oder eine andere Datenstruktur für die Analyse konvertiert, bleibt euch überlassen. Praktischerweise könnt ihr eine Liste von Dicts (die zuvor JSON-Objekte waren) an den DataFrame-Konstruktor übergeben:

[3]:
import pandas as pd


df = pd.DataFrame(data)

df
[3]:
Titel Sprache Autor*innen Lizenz Veröffentlichungsdatum
0 Python basics en Veit Schiele BSD-3-Clause 2021-10-28
1 Jupyter Tutorial en Veit Schiele BSD-3-Clause 2019-06-27
2 Jupyter Tutorial de Veit Schiele BSD-3-Clause 2020-10-26
3 PyViz Tutorial en Veit Schiele BSD-3-Clause 2020-04-13

pandas.read_json kann JSON-Datensätze in bestimmten Anordnungen automatisch in eine Serie oder einen DataFrame umwandeln, z.B.:

[4]:
pd.read_json("books.json")
[4]:
Titel Sprache Autor*innen Lizenz Veröffentlichungsdatum
0 Python basics en Veit Schiele BSD-3-Clause 2021-10-28
1 Jupyter Tutorial en Veit Schiele BSD-3-Clause 2019-06-27
2 Jupyter Tutorial de Veit Schiele BSD-3-Clause 2020-10-26
3 PyViz Tutorial en Veit Schiele BSD-3-Clause 2020-04-13

Die Standardoptionen für pandas.read_json gehen davon aus, dass jedes Objekt im JSON-Array eine Zeile in der Tabelle ist.

Wenn ihr Daten aus pandas in JSON exportieren wollt, könnt ihr pandas.DataFrame.to_json verwenden:

[5]:
print(df.to_json())
{"Titel":{"0":"Python basics","1":"Jupyter Tutorial","2":"Jupyter Tutorial","3":"PyViz Tutorial"},"Sprache":{"0":"en","1":"en","2":"de","3":"en"},"Autor*innen":{"0":"Veit Schiele","1":"Veit Schiele","2":"Veit Schiele","3":"Veit Schiele"},"Lizenz":{"0":"BSD-3-Clause","1":"BSD-3-Clause","2":"BSD-3-Clause","3":"BSD-3-Clause"},"Ver\u00f6ffentlichungsdatum":{"0":"2021-10-28","1":"2019-06-27","2":"2020-10-26","3":"2020-04-13"}}
[6]:
print(df.to_json(orient="records"))
[{"Titel":"Python basics","Sprache":"en","Autor*innen":"Veit Schiele","Lizenz":"BSD-3-Clause","Ver\u00f6ffentlichungsdatum":"2021-10-28"},{"Titel":"Jupyter Tutorial","Sprache":"en","Autor*innen":"Veit Schiele","Lizenz":"BSD-3-Clause","Ver\u00f6ffentlichungsdatum":"2019-06-27"},{"Titel":"Jupyter Tutorial","Sprache":"de","Autor*innen":"Veit Schiele","Lizenz":"BSD-3-Clause","Ver\u00f6ffentlichungsdatum":"2020-10-26"},{"Titel":"PyViz Tutorial","Sprache":"en","Autor*innen":"Veit Schiele","Lizenz":"BSD-3-Clause","Ver\u00f6ffentlichungsdatum":"2020-04-13"}]