Signatur
Beschreibung
Die Methode toJSON() wandelt eine DOMMatrixReadOnly oder eine DOMMatrix in ein einfaches JavaScript-Objekt um. Trotz des Namens gibt sie keinen JSON-String zurück, sondern ein Objekt, das JSON.stringify() anschließend in Text umwandeln kann. Dieses Objekt enthält alle Eigenschaften der Matrix: die 2D-Kurzformen a bis f, die 16 Werte m11 bis m44 sowie die booleschen Werte is2D und isIdentity.
Normalerweise ruft man toJSON() gar nicht selbst auf: JSON.stringify() nutzt die Methode automatisch, sobald ein DOMMatrix-Objekt im Wert vorkommt, auch verschachtelt in anderen Objekten oder Arrays. Ohne toJSON() käme nur {} heraus, weil die Matrix-Werte Getter auf dem Prototyp sind und keine eigenen Eigenschaften.
Typische Einsätze sind das Speichern von Transformationen, etwa Zoom- oder Pan-Zustände eines Canvas-Editors in localStorage, das Senden an einen Server und das Debugging. Wiederherstellen lässt sich die Matrix mit DOMMatrix.fromMatrix() oder DOMMatrixReadOnly.fromMatrix(), denn das zurückgegebene Objekt passt zum Wörterbuch DOMMatrixInit.
Rückgabewert
a, b, c, d, e, f, m11–m44 und den booleschen Eigenschaften is2D und isIdentity.Beispiele
Matrix direkt in ein Objekt umwandeln
const matrix = new DOMMatrix().translate(10, 20);
const obj = matrix.toJSON();
console.log(obj.e, obj.f); // Verschiebung in 2D-Kurzform
console.log(obj.m41, obj.m42); // dieselben Werte in 4×4-Form
console.log(obj.is2D, obj.isIdentity);
Automatischer Aufruf durch JSON.stringify()
const matrix = new DOMMatrix().translate(10, 20);
// JSON.stringify ruft toJSON() selbst auf
console.log(JSON.stringify(matrix));
Zoom-/Pan-Zustand eines Canvas speichern und wiederherstellen
const saveView = (matrix) => {
localStorage.setItem('viewTransform', JSON.stringify({ transform: matrix }));
};
const loadView = () => {
const raw = localStorage.getItem('viewTransform');
if (!raw) return new DOMMatrix();
const { transform } = JSON.parse(raw);
// is2D / isIdentity werden von fromMatrix berücksichtigt bzw. ignoriert
return DOMMatrix.fromMatrix(transform);
};
const view = new DOMMatrix().scale(2).translate(50, 30);
saveView(view);
const restored = loadView();
console.log(restored.toString());
const ctx = document.querySelector('canvas').getContext('2d');
ctx.setTransform(restored);
// Wichtig · Fallstricke
- Kein String:
toJSON()gibt ein Objekt zurück. Für Text braucht es zusätzlichJSON.stringify(). - Keine Rückumwandlung durch
JSON.parse(): Heraus kommt nur ein einfaches Objekt. Eine echte Matrix erhältst du erst mitDOMMatrix.fromMatrix(obj). - Nicht-endliche Werte:
NaNundInfinitywerden in JSON zunull,-0wird zu0. Beim Wiederherstellen wirdnullzu0, dabei gehen also still Daten verloren. - Rundungsfehler: Nach
rotate()stehen oft Werte wie6.123233995736766e-17statt0in der Matrix. Wenn nötig, vor dem Speichern runden. - Prüfung bei
fromMatrix(): Istis2D: truegesetzt, obwohl 3D-Werte ungleich 0 bzw. 1 vorkommen, oder passenaundm11nicht zusammen, wird einTypeErrorausgelöst. - Kompatibilität: Die Methode ist in allen modernen Browsern und in Web Workern verfügbar. Node.js hat kein eingebautes
DOMMatrix, dort braucht es ein Polyfill (z. B. ausjsdom- oder Canvas-Paketen).