JSON Toolkit

Vergleich von JSON-Parsing- und -Verarbeitungsbibliotheken

Fazit: Native APIs sind am schnellsten, tolerante Parser liefern Offsets. Wählen Sie nach drei Dingen: Fehlerlokalisierung, ob der Originaltext bewahrt wird und ob die Grenzen ausdrücklich sind.

Fortgeschritten~11 Min. LesezeitVeröffentlicht 2026-10-30Aktualisiert 2026-10-30
Titelbild für den Vergleich von JSON-Parsing- und -Verarbeitungsbibliotheken

Kurz gesagt: Klassifizieren Sie zuerst das Bedürfnis, dann vergleichen Sie Implementierungen – natives JSON.parse für reine Lesevorgänge, jsonc-parser, wenn Sie Offsets brauchen oder die Originalformatierung bewahren müssen, und Query- oder Patch-Bibliotheken nur dort ergänzen, wo sie nötig sind; große Bibliotheken seitenweise lazy laden und ungewartete fallen lassen.

Jede Bibliothek behauptet, „schnell, klein und vollständig“ zu sein. Was sie wirklich unterscheidet, ist, wie viel Information sie Ihnen gibt, wenn etwas schiefgeht.

1. Vier Kategorien nach Zweck

Kategorie Repräsentative Bibliotheken Was sie löst
Standard-Parsing JSON.parse / JSON.stringify Syntax ↔ Objekt, Geschwindigkeit zuerst
Tolerantes Parsen + Bearbeiten jsonc-parser, json5 Eingabe mit Kommentaren, Fehler offsetgenau, Änderungen, die die Formatierung bewahren
Abfrage jsonpath-plus, jsonpath Knoten nach Ausdruck auswählen
Mutation fast-json-patch, immer Patches erzeugen/anwenden, unveränderliche Updates

Identifizieren Sie zuerst, in welcher Kategorie Sie sind, und vergleichen Sie dann konkrete Implementierungen – sonst ist es leicht, eine Abfragebibliothek für die Arbeit eines Parsers zu verwenden.

2. Seitenweiser Vergleich

Bibliothek Fehlerlokalisierung Toleranz (Kommentare/nachfolgende Kommas) Bewahrt Originalformatierung Geeignete Szenarien
JSON.parse Nur Meldung und Position (engineabhängig) ✗ ✗ Standard-Parsing, API-Daten
jsonc-parser Präziser offset + Fehlercode ✓ ✓ (modify + applyEdits) Editoren, Konfigurationsdateien
json5 Zeilen- und Spalteninformation ✓ (nachsichtiger) ✗ JSON5-Konfiguration lesen
jsonlint Zeilen- und Spalteninformation ✗ ✗ Nur als Referenz, nicht aktiv gepflegt
jsonpath-plus Ausdruckssyntaxfehler — — Abfrage nach Ausdruck
fast-json-patch Fehler auf Operationsebene — — Patch-Erzeugung und -Anwendung
lz-string — — — JSON in eine URL komprimieren

JSON.parse-Fehlermeldungen variieren stark zwischen Engines. V8 erzeugt etwas wie Unexpected token } in JSON at position 42, aber ob die Position genau ist, hängt von der Engine-Version ab; jsonc-parser liefert stattdessen ein stabiles strukturiertes { error, offset, length }, das für Editor-Marker geeignet ist.

3. Vier zentrale Entscheidungspunkte

3.1 Brauchen Sie Offsets

Bauen Sie einen Editor und wollen „Klick auf den Fehler springt zur entsprechenden Zeile“, müssen Sie einen Offset haben. Der Test ist einfach: Kann Ihre Fehlermeldung nur „ungültiges JSON“ ausgeben, müssen Nutzer selbst danach suchen.

import { parse, printParseErrorCode } from 'jsonc-parser';

const errors: Array<{ error: number; offset: number; length: number }> = [];
parse(text, errors, { allowTrailingComma: true, disallowComments: false });

if (errors.length > 0) {
  const firstError = errors[0];
  console.error(`${printParseErrorCode(firstError.error)} at offset ${firstError.offset}`);
}

3.2 Müssen Sie den Originaltext bewahren

Nur Werte lesen → jeder Parser genügt. „Ein Feld ändern und alles andere exakt so lassen, wie es war“ → Sie müssen eine Bearbeitungs-API verwenden, nicht „parsen → Objekt ändern → serialisieren“.

Letzteres verliert: Kommentare, Schlüsselreihenfolge (in manchen Implementierungen), Einrückungsstil, Notation numerischer Literale (1e3 wird 1000) und Escape-Formen (\u4e2d wird das tatsächliche Zeichen).

3.3 Sind die Randverhalten ausdrücklich

Prüfen Sie vor der Wahl einer Bibliothek die Dokumentation auf drei Dinge:

  1. Wie doppelte Schlüssel behandelt werden (den letzten behalten / einen Fehler werfen);
  2. Ob große Ganzzahlen Präzision verlieren (die meisten JS-Bibliotheken tun es, weil sie alle durch Number gehen);
  3. Den unterstützten Umfang für BOM, Kommentare und nachfolgende Kommas.

Gibt es keine Dokumentation, schreiben Sie ein kleines Beispiel und testen Sie selbst. Das ist verlässlicher als das README zu lesen.

3.4 Wartungsstatus

Das Risiko einer JSON-Bibliothek ist nicht eine fehlende Funktion, sondern langfristige Vernachlässigung: Niemand wird mehr Sicherheitspatches ausliefern (Prototype Pollution, ReDoS).

4. Vergleich mit anderen Sprachen

Sprache Standardbibliothek / Mainstream-Bibliothek Wesentlicher Unterschied
JavaScript JSON.parse Alle Zahlen sind doppelt präzise
TypeScript Wie oben + jsonc-parser / zod Typen existieren nur zur Kompilierzeit
Go encoding/json Standardmäßig float64, UseNumber() zur Präzisionserhaltung; json.RawMessage für verzögertes Parsen
Java Jackson / Gson / Moshi Bei Jackson auf das Risiko von Default Typing achten
Python json / orjson parse_float=Decimal bewahrt Präzision; orjson ist schneller, unterstützt aber nicht alle Typen
Rust serde_json Stark typisierte Deserialisierung; das Feature arbitrary_precision bewahrt Präzision
C++ simdjson / RapidJSON simdjson zielt auf Parsing-Durchsatz, RapidJSON ist allgemeiner

Beim sprachübergreifenden Datenaustausch sind die leichtesten Stolpersteine weiterhin Zahlenpräzision und Zeitformate; die Bibliothekswahl kann sie nur mildern, nicht beseitigen.

5. Typische Kombinationen

Option 1: Werkzeugseite (Browser-Seite)

Parsing and error location: jsonc-parser
Editor: CodeMirror 6 + @codemirror/lang-json
Query: jsonpath-plus
Patch: fast-json-patch
Share links: lz-string

Das prägende Merkmal dieser Kombination ist, dass alles lokal läuft und keine Daten hochgeladen werden, was den Datenschutzerwartungen einer Utility-Seite entspricht.

Option 2: Serverseitiges API-Gateway

Validation: Ajv (compile the schema once, reuse it)
Parsing: native JSON.parse (together with a body size limit)
Deferred parsing of large fields: keep the raw string, parse only when needed

Führen Sie im Gateway-Layer keine Query-/Patch-Bibliotheken ein, um Geschäftslogik umzusetzen – das ist die Aufgabe der Geschäftsschicht.

Option 3: CLI und Skripte

Pick fields: jq
Format conversion: yq / dasel
Interactive browsing: jless
Batch validation: ajv-cli

6. Die echte Auswirkung von Bundlegröße und Performance

  • jsonc-parser ist sehr klein und fürs Hauptbundle geeignet;
  • json5 ist etwas größer als jsonc-parser, weil es mehr Syntax unterstützt;
  • jsonpath-plus enthält Ausdrucksauswertung und ist merklich größer, es sollte seitenweise lazy geladen werden;
  • fast-json-patch ist mittelgroß und nur nötig, wenn Sie eine Vergleichsfunktion haben.

Die Optimierung ist geradlinig: seitenweise dynamisch importieren und sie nicht in den First-Screen-Chunk legen.

const { JSONPath } = await import('jsonpath-plus');

7. Checkliste

  • [ ] Bibliotheken nach Zweck wählen; keine Abfragebibliothek zum Parsen verwenden;
  • [ ] jsonc-parser verwenden, wenn präzise Fehlerstellen gebraucht werden;
  • [ ] Bearbeitungs-APIs verwenden, wenn Kommentare und Formatierung erhalten bleiben müssen;
  • [ ] Die drei Randverhalten praktisch testen: doppelte Schlüssel, große Ganzzahlen und BOM;
  • [ ] Wartungsstatus und Sicherheitshinweise der Bibliothek beobachten;
  • [ ] Große Bibliotheken bei Bedarf dynamisch importieren.

FAQ

Wie wähle ich eine JSON-Bibliothek für meine Projektgröße?

Kleine Werkzeuge, die nur API-Daten lesen, können bei nativem JSON.parse bleiben. Projekte, die Fehlerstellen auf Editor-Niveau brauchen oder die Originalformatierung bewahren müssen, sollten jsonc-parser verwenden. Ein serverseitiges Gateway braucht nur Validierung und Parsing und überlässt Query- und Patch-Bibliotheken der Geschäftsschicht, während CLI-Skripte direkt jq, yq und ajv-cli verwenden können.

Warum zählt Wartungsstatus mehr als Funktionsumfang?

Das echte Risiko einer JSON-Bibliothek ist langfristige Vernachlässigung, nicht eine fehlende Funktion: Niemand wird Sicherheitspatches für Prototype Pollution oder ReDoS ausliefern. So vollständig die Funktionsliste auch ist, eine stehengebliebene Bibliothek lässt Sie selbst patchen. Behandeln Sie Wartung und Sicherheitshinweise als harte Kriterien, statt Funktionstabellen zu vergleichen.

Sollte ich JSON.parse verwenden, um ein Feld zu ändern und Kommentare sowie Einrückung zu behalten?

Nein. Parsen, das Objekt ändern und dann serialisieren verliert Kommentare, Schlüsselreihenfolge, Einrückungsstil, Notation numerischer Literale (1e3 wird 1000) und Escape-Formen (\u4e2d wird das tatsächliche Zeichen). Ein Feld zu ändern und alles andere intakt zu lassen erfordert eine Bearbeitungs-API wie modify und applyEdits in jsonc-parser.