{
"cells": [
{
"cell_type": "markdown",
"id": "1afdb476",
"metadata": {},
"source": [
"# JSON-Beispiel\n",
"\n",
"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:\n",
"\n",
"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](https://docs.python.org/3/library/json.html) aus der Python-Standardbibliothek verwenden. Um einen JSON-String in die Python-Form zu konvertieren, verwende ich `json.loads`:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "8b16f258",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-22T08:12:45.094855Z",
"iopub.status.busy": "2026-05-22T08:12:45.094621Z",
"iopub.status.idle": "2026-05-22T08:12:45.100148Z",
"shell.execute_reply": "2026-05-22T08:12:45.099571Z",
"shell.execute_reply.started": "2026-05-22T08:12:45.094836Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'Titel': 'Python basics', 'Sprache': 'en', 'Autor*innen': 'Veit Schiele', 'Lizenz': 'BSD-3-Clause', 'Veröffentlichungsdatum': '2021-10-28'}\n",
"{'Titel': 'Jupyter Tutorial', 'Sprache': 'en', 'Autor*innen': 'Veit Schiele', 'Lizenz': 'BSD-3-Clause', 'Veröffentlichungsdatum': '2019-06-27'}\n",
"{'Titel': 'Jupyter Tutorial', 'Sprache': 'de', 'Autor*innen': 'Veit Schiele', 'Lizenz': 'BSD-3-Clause', 'Veröffentlichungsdatum': '2020-10-26'}\n",
"{'Titel': 'PyViz Tutorial', 'Sprache': 'en', 'Autor*innen': 'Veit Schiele', 'Lizenz': 'BSD-3-Clause', 'Veröffentlichungsdatum': '2020-04-13'}\n"
]
}
],
"source": [
"import json\n",
"\n",
"from pathlib import Path\n",
"\n",
"\n",
"with Path.open(\"books.json\") as f:\n",
" data = json.load(f)\n",
"\n",
" for i in data:\n",
" print(i)"
]
},
{
"cell_type": "markdown",
"id": "ddf08f2d",
"metadata": {},
"source": [
"[json.dumps](https://docs.python.org/3/library/json.html#json.dumps) hingegen konvertiert ein Python-Objekt zurück nach JSON:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "6e4413b5",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-22T08:12:45.101042Z",
"iopub.status.busy": "2026-05-22T08:12:45.100802Z",
"iopub.status.idle": "2026-05-22T08:12:45.107561Z",
"shell.execute_reply": "2026-05-22T08:12:45.107204Z",
"shell.execute_reply.started": "2026-05-22T08:12:45.101025Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"'[{\"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\"}]'"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"json.dumps(data)"
]
},
{
"cell_type": "markdown",
"id": "9be93ffb",
"metadata": {},
"source": [
"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:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "5262a183",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-22T08:12:45.108198Z",
"iopub.status.busy": "2026-05-22T08:12:45.108122Z",
"iopub.status.idle": "2026-05-22T08:12:45.553279Z",
"shell.execute_reply": "2026-05-22T08:12:45.552977Z",
"shell.execute_reply.started": "2026-05-22T08:12:45.108190Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Titel | \n",
" Sprache | \n",
" Autor*innen | \n",
" Lizenz | \n",
" Veröffentlichungsdatum | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" Python basics | \n",
" en | \n",
" Veit Schiele | \n",
" BSD-3-Clause | \n",
" 2021-10-28 | \n",
"
\n",
" \n",
" | 1 | \n",
" Jupyter Tutorial | \n",
" en | \n",
" Veit Schiele | \n",
" BSD-3-Clause | \n",
" 2019-06-27 | \n",
"
\n",
" \n",
" | 2 | \n",
" Jupyter Tutorial | \n",
" de | \n",
" Veit Schiele | \n",
" BSD-3-Clause | \n",
" 2020-10-26 | \n",
"
\n",
" \n",
" | 3 | \n",
" PyViz Tutorial | \n",
" en | \n",
" Veit Schiele | \n",
" BSD-3-Clause | \n",
" 2020-04-13 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Titel Sprache Autor*innen Lizenz Veröffentlichungsdatum\n",
"0 Python basics en Veit Schiele BSD-3-Clause 2021-10-28\n",
"1 Jupyter Tutorial en Veit Schiele BSD-3-Clause 2019-06-27\n",
"2 Jupyter Tutorial de Veit Schiele BSD-3-Clause 2020-10-26\n",
"3 PyViz Tutorial en Veit Schiele BSD-3-Clause 2020-04-13"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"\n",
"df = pd.DataFrame(data)\n",
"\n",
"df"
]
},
{
"cell_type": "markdown",
"id": "0094405a",
"metadata": {},
"source": [
"[pandas.read_json](https://pandas.pydata.org/docs/reference/api/pandas.read_json.html) kann JSON-Datensätze in bestimmten Anordnungen automatisch in eine Serie oder einen DataFrame umwandeln, z.B.:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "4f3d7a02",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-22T08:12:45.553921Z",
"iopub.status.busy": "2026-05-22T08:12:45.553799Z",
"iopub.status.idle": "2026-05-22T08:12:45.560404Z",
"shell.execute_reply": "2026-05-22T08:12:45.560075Z",
"shell.execute_reply.started": "2026-05-22T08:12:45.553913Z"
},
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Titel | \n",
" Sprache | \n",
" Autor*innen | \n",
" Lizenz | \n",
" Veröffentlichungsdatum | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" Python basics | \n",
" en | \n",
" Veit Schiele | \n",
" BSD-3-Clause | \n",
" 2021-10-28 | \n",
"
\n",
" \n",
" | 1 | \n",
" Jupyter Tutorial | \n",
" en | \n",
" Veit Schiele | \n",
" BSD-3-Clause | \n",
" 2019-06-27 | \n",
"
\n",
" \n",
" | 2 | \n",
" Jupyter Tutorial | \n",
" de | \n",
" Veit Schiele | \n",
" BSD-3-Clause | \n",
" 2020-10-26 | \n",
"
\n",
" \n",
" | 3 | \n",
" PyViz Tutorial | \n",
" en | \n",
" Veit Schiele | \n",
" BSD-3-Clause | \n",
" 2020-04-13 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Titel Sprache Autor*innen Lizenz Veröffentlichungsdatum\n",
"0 Python basics en Veit Schiele BSD-3-Clause 2021-10-28\n",
"1 Jupyter Tutorial en Veit Schiele BSD-3-Clause 2019-06-27\n",
"2 Jupyter Tutorial de Veit Schiele BSD-3-Clause 2020-10-26\n",
"3 PyViz Tutorial en Veit Schiele BSD-3-Clause 2020-04-13"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.read_json(\"books.json\")"
]
},
{
"cell_type": "markdown",
"id": "ada282c9",
"metadata": {},
"source": [
"Die Standardoptionen für `pandas.read_json` gehen davon aus, dass jedes Objekt im JSON-Array eine Zeile in der Tabelle ist."
]
},
{
"cell_type": "markdown",
"id": "07c9235e",
"metadata": {},
"source": [
"Wenn ihr Daten aus pandas in JSON exportieren wollt, könnt ihr [pandas.DataFrame.to_json](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_json.html) verwenden:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "8899e9b2",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-22T08:12:45.560863Z",
"iopub.status.busy": "2026-05-22T08:12:45.560787Z",
"iopub.status.idle": "2026-05-22T08:12:45.562962Z",
"shell.execute_reply": "2026-05-22T08:12:45.562727Z",
"shell.execute_reply.started": "2026-05-22T08:12:45.560855Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{\"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\"}}\n"
]
}
],
"source": [
"print(df.to_json())"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "4fa999eb",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-22T08:12:45.564193Z",
"iopub.status.busy": "2026-05-22T08:12:45.564115Z",
"iopub.status.idle": "2026-05-22T08:12:45.565860Z",
"shell.execute_reply": "2026-05-22T08:12:45.565636Z",
"shell.execute_reply.started": "2026-05-22T08:12:45.564186Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[{\"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\"}]\n"
]
}
],
"source": [
"print(df.to_json(orient=\"records\"))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.13 Kernel",
"language": "python",
"name": "python313"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.0"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"state": {},
"version_major": 2,
"version_minor": 0
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}