Zeilen im Quelltext und im Wert sind unterschiedlich

In einem JSON-String codiert ein Backslash mit n einen Umbruch. Zwei Backslashes lassen einen Backslash und n als zwei Zeichen im geparsten Wert stehen. Beide Beispiele sind gültig, doch die text-Werte haben die Längen 3 und 4.

{"text":"A\nB"}
{"text":"A\\nB"}

JSON.parse('{"text":"A\\nB"}').text.length // 3
JSON.parse('{"text":"A\\\\nB"}').text.length // 4
Diagramm: ein LF-Zeichen gegenüber Backslash und n zwischen A und B
Eigenes Diagramm aus ausgeführten Eingaben. Die Zahlen sind die JavaScript-length des geparsten text-Werts, nicht die Dateigröße in Bytes.

Ein echter Umbruch innerhalb eines Strings ist ein Fehler

RFC 8259 verlangt Escape-Sequenzen für Steuerzeichen U+0000 bis U+001F in Strings, einschließlich eines echten LF. Zwischen Tokens sind LF, CR, Tabs und Leerzeichen erlaubt. Im Test wurde LF im String abgelehnt, ein mehrzeiliges Objekt dagegen akzeptiert.

const invalid = '{"text":"A' + '\n' + 'B"}';
formatJSON(invalid); // throws

formatJSON('{\n"text":"AB"\n}'); // accepted

RFC 8259 §7: Strings · RFC 8259 §2: JSON Grammar

Formatierung und Wertinterpretation trennen

Moyoutil erhält String-Tokens und verändert die äußere Einrückung. Es stellt \n nicht als echten Umbruch innerhalb des Werts dar. Auch beim Minifizieren bleiben Escapes erhalten. Prüfe bei Fehlern Anführungszeichen und Backslashes nahe der gemeldeten Stelle. Pauschal hinzugefügte Backslashes können korrekte Werte verändern.

Führe Formatierung und Prüfung mit den Beispielen aus und vergleiche die minifizierte Ausgabe. Serialisiere Werte mit Umbrüchen bei der JSON-Erzeugung mit JSON.stringify und prüfe den Wert mit JSON.parse. Eine Syntaxprüfung prüft keine Pflichtfelder eines API-Schemas.

Häufig gestellte Fragen

Entfernt Minifizieren Umbrüche in den Werten?

Nein. Es reduziert Leerraum außerhalb von Strings. Das Tool erhält die Escapes, daher bleiben Umbrüche in den geparsten Werten erhalten.