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:
[1]:
books = """
[
{
"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"
}
]
"""
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
:
[2]:
import json
results2 = json.loads(books)
results2
[2]:
[{'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'}]
json.dumps hingegen konvertiert ein Python-Objekt zurück nach JSON:
[3]:
json.dumps(results2)
[3]:
'[{"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"}]'
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:
[4]:
import pandas as pd
df = pd.DataFrame(results2)
df
[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 |
pandas.read_json kann JSON-Datensätze in bestimmten Anordnungen automatisch in eine Serie oder einen DataFrame umwandeln, z.B.:
[5]:
pd.read_json('books.json')
[5]:
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:
[6]:
print(df.to_json())
{"Titel":{"0":"Python basics","1":"Jupyter Tutorial"},"Sprache":{"0":"en","1":"en"},"Autor*innen":{"0":"Veit Schiele","1":"Veit Schiele"},"Lizenz":{"0":"BSD-3-Clause","1":"BSD-3-Clause"},"Ver\u00f6ffentlichungsdatum":{"0":"2021-10-28","1":"2019-06-27"}}
[7]:
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"}]