Magento 2 Experten — Hyvä Theme, Tailwind CSS & SEO aus einer Hand ›

Arbeiten mit JSON und dem Dateisystem in JavaScript

Arbeiten mit JSON und dem Dateisystem in JavaScript

~13 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026

Wir haben JSON.parse/JSON.stringify bereits mehrfach genutzt – Zeit für einen vertieften Blick, inklusive einiger Stolperfallen, die bei der Persistierung unseres Haushaltsbuchs relevant werden.

JSON.stringify() im Detail

const transaktion = { beschreibung: 'Miete', betrag: -850, kategorie: 'Wohnen' };

console.log(JSON.stringify(transaktion));
// '{"beschreibung":"Miete","betrag":-850,"kategorie":"Wohnen"}'

// Mit Einrückung für lesbare Dateien (dritter Parameter: Anzahl Leerzeichen):
console.log(JSON.stringify(transaktion, null, 2));

Der zweite Parameter (replacer) erlaubt es, bestimmte Eigenschaften auszuschließen oder zu transformieren – nützlich, um z. B. interne, nicht zu persistierende Felder aus der Ausgabe fernzuhalten:

const transaktion = { beschreibung: 'Miete', betrag: -850, internerCache: { irrelevant: true } };

console.log(JSON.stringify(transaktion, ['beschreibung', 'betrag']));
// '{"beschreibung":"Miete","betrag":-850}' - internerCache ausgeschlossen

Was JSON NICHT abbilden kann

JSON ist ein reines Text-Datenformat mit begrenztem Typumfang – einige JavaScript-Werte gehen beim JSON.stringify() VERLOREN oder werden UNERWARTET umgewandelt:

  • undefined als Objekteigenschaft wird KOMPLETT weggelassen, in einem Array wird es zu null.
  • function-Werte werden KOMPLETT weggelassen.
  • Date-Objekte werden automatisch zu ISO-String umgewandelt ('2026-01-31T00:00:00.000Z'), NICHT automatisch zurück beim Parsen - JSON.parse() liefert wieder nur einen String!
  • Map und Set werden zu {} - ihre eigentlichen Daten gehen VOLLSTÄNDIG verloren.

Achtung: Für unser Haushaltsbuch bedeutet das konkret: Ein Datum sollte als einfacher String ('2026-01-31') gespeichert werden, wie wir es seit Kapitel 4 bereits tun – NICHT als Date-Objekt, dessen Rundreise durch JSON nur die halbe Information wiederherstellt.

JSON.parse() mit reviver: Werte beim Einlesen transformieren

const json = '{"beschreibung":"Miete","betrag":-850}';

const transaktion = JSON.parse(json, (schluessel, wert) => {
  if (schluessel === 'betrag') {
    return Math.round(wert); // z. B. Nachkommastellen konsequent runden
  }
  return wert;
});

console.log(transaktion); // { beschreibung: 'Miete', betrag: -850 }

Das fs-Modul vertieft: Verzeichnisse sicherstellen

Bevor unser Haushaltsbuch in eine Datei schreibt, sollte das Zielverzeichnis existieren – mkdir mit der recursive-Option erstellt fehlende Zwischenverzeichnisse automatisch und wirft KEINEN Fehler, falls das Verzeichnis bereits existiert:

src/dateiSpeicher.js
import { readFile, writeFile, mkdir } from 'node:fs/promises';
import { dirname } from 'node:path';
import { DateiNichtGefundenFehler, HaushaltsbuchFehler } from './fehler.js';

export async function ladeTransaktionen(pfad) {
  try {
    const inhalt = await readFile(pfad, 'utf-8');
    return JSON.parse(inhalt);
  } catch (fehler) {
    if (fehler.code === 'ENOENT') {
      throw new DateiNichtGefundenFehler(pfad);
    }
    throw new HaushaltsbuchFehler(`Konnte ${pfad} nicht lesen: ${fehler.message}`);
  }
}

export async function speichereTransaktionen(pfad, transaktionen) {
  try {
    await mkdir(dirname(pfad), { recursive: true }); // Verzeichnis sicherstellen
    await writeFile(pfad, JSON.stringify(transaktionen, null, 2), 'utf-8');
  } catch (fehler) {
    throw new HaushaltsbuchFehler(`Konnte ${pfad} nicht schreiben: ${fehler.message}`);
  }
}

node:path's dirname() extrahiert den Verzeichnisanteil eines Pfades (dirname('daten/transaktionen.json') ergibt 'daten') – ein weiteres eingebautes Node.js-Modul, das bei Datei-Pfad-Manipulation nützlich ist.

Eine kurze Erwähnung: robusteres Schreiben

Tipp: Für produktionsreife Systeme wird oft ZUERST in eine temporäre Datei geschrieben und DANACH umbenannt (statt die Zieldatei direkt zu überschreiben) – so bleibt bei einem Absturz MITTEN im Schreibvorgang die alte, intakte Datei erhalten, statt in einem halb geschriebenen, korrupten Zustand zu enden. Für unser Lern-Haushaltsbuch ist das direkte Schreiben ausreichend, aber gut zu wissen für spätere, echte Projekte.