{ "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TitelSpracheAutor*innenLizenzVeröffentlichungsdatum
0Python basicsenVeit SchieleBSD-3-Clause2021-10-28
1Jupyter TutorialenVeit SchieleBSD-3-Clause2019-06-27
2Jupyter TutorialdeVeit SchieleBSD-3-Clause2020-10-26
3PyViz TutorialenVeit SchieleBSD-3-Clause2020-04-13
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TitelSpracheAutor*innenLizenzVeröffentlichungsdatum
0Python basicsenVeit SchieleBSD-3-Clause2021-10-28
1Jupyter TutorialenVeit SchieleBSD-3-Clause2019-06-27
2Jupyter TutorialdeVeit SchieleBSD-3-Clause2020-10-26
3PyViz TutorialenVeit SchieleBSD-3-Clause2020-04-13
\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 }