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"}]