====== LU01c - JSON-Datei einlesen und ausgeben ====== ===== Was ist JSON? ===== JSON (JavaScript Object Notation) ist ein textbasiertes Datenformat fuer Datenaustausch, Konfigurationen und API-Antworten. In JavaScript ist JSON besonders bequem, weil es der Objekt-Notation sehr aehnelt. **Typische JSON-Struktur (Datei person.json):** { "name": "Anna", "alter": 30, "ist_aktiv": true, "hobbys": ["Lesen", "Radfahren"], "adresse": { "stadt": "Berlin", "plz": "10115" } } ===== Das fs-Modul ===== Grundsätzlich benötige wir das Modul //fs// (File System) um Daten aus Files ins JavaScript einlesen zu können. Damit müssem wir die Funktionen zum Einlesen der Daten aus der JSON-Datei nicht selbst schreiben. Das //fs-Modul// bietet uns verschiedene, sehr praktische Methoden wie //readFileSync//, die alle Werte aus der JSON-Datei in ein entsprechendes JS-Objekt einliest. ^ Funktion ^ Zweck ^ | fs.readFile() | Datei asynchron lesen | | fs.readFileSync() | Datei synchron lesen | | fs.writeFile() | Datei speichern/anlegen | | fs.mkdir() | Ordner erstellen | | fs.unlink() | Datei loeschen | | fs.existsSync() | Pruefen, ob eine Datei existiert | ===== Synchrones Einlesen ===== **einlesenSync.js** const fs = require("fs"); // nicht vergessen // // Datei einlesen const jsonText = fs.readFileSync("person.json", "utf8"); // // In Objekt umwandeln const daten = JSON.parse(jsonText); // console.log(typeof daten); // object console.log(daten); // // Einzelfelder ausgeben console.log("Name:", daten.name); console.log("Alter:", daten.alter); console.log("Aktiv:", daten.ist_aktiv); // // Hobbys console.log("Hobbys:"); daten.hobbys.forEach(hobby => console.log(" -", hobby)); // // Adresse console.log("Adresse:"); console.log(" Stadt:", daten.adresse.stadt); console.log(" PLZ:", daten.adresse.plz); ===== Asynchrones Einlesen===== ** einlesenAsync.js** const fs = require("fs"); // // Asynchrones Einlesen fs.readFile("person.json", "utf8", (err, data) => { if (err) { console.error("Fehler beim Lesen:", err); return; } // // JSON umwandeln const daten = JSON.parse(data); // console.log(typeof daten); // object console.log(daten); // console.log("Name:", daten.name); console.log("Alter:", daten.alter); console.log("Aktiv:", daten.ist_aktiv); // console.log("Hobbys:"); daten.hobbys.forEach(hobby => console.log(" -", hobby)); // console.log("Adresse:"); console.log(" Stadt:", daten.adresse.stadt); console.log(" PLZ:", daten.adresse.plz); }); ===== Auf einzelne Werte zugreifen ===== console.log(daten.name); // Anna console.log(daten.alter); // 30 console.log(daten.hobbys[0]); // Lesen console.log(daten.adresse.stadt); // Berlin // // optionaler Zugriff mit optional chaining console.log(daten.adresse?.stadt ?? "unbekannt"); ===== JSON formatiert ausgeben ===== **Rohes Objekt:** console.log(daten); **Formatiert als JSON-String:** const jsonString = JSON.stringify(daten, null, 4); console.log(jsonString); **Parameter bei JSON.stringify:** - Argument: das Objekt - Argument: Replacer (meist null) - Argument: Anzahl Leerzeichen fuer Einrueckung (4 = gut lesbar, nicht komplett uebertrieben) **einlesenAsyncFormatiert.js** const fs = require("fs"); // fs.readFile("person.json", "utf8", (err, data) => { if (err) { console.error("Fehler beim Lesen:", err); return; } // const daten = JSON.parse(data); // console.log(typeof daten); // object // console.log("\n--- Gesamte Daten als formatierter JSON-String ---"); console.log(JSON.stringify(daten, null, 2)); // << formatierte Ausgabe // console.log("\n--- Einzelwerte ---"); console.log("Name:", daten.name); console.log("Alter:", daten.alter); console.log("Aktiv:", daten.ist_aktiv); // console.log("\nHobbys:"); daten.hobbys.forEach(hobby => console.log(" -", hobby)); // console.log("\nAdresse:"); console.log(" Stadt:", daten.adresse.stadt); console.log(" PLZ:", daten.adresse.plz); }); ---- [[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] Volkan Demir