Start · Sprachen · JavaScript · Referenz · GeolocationCoordinates.toJSON()

GeolocationCoordinates.toJSON()

Methode

Gibt ein einfaches Objekt mit allen Eigenschaften eines <code>GeolocationCoordinates</code>-Objekts zurück, damit es sich mit <code>JSON.stringify()</code> serialisieren lässt.

seit JavaScript Baseline 2024: Chrome 116, Edge 116, Firefox 120, Kategorie: webapi

Signatur

GeolocationCoordinates.prototype.toJSON()

Beschreibung

Die Methode toJSON() der Schnittstelle GeolocationCoordinates ist ein Serializer. Sie liefert ein gewöhnliches JavaScript-Objekt mit den Eigenschaften latitude, longitude, altitude, accuracy, altitudeAccuracy, heading und speed. Die Werte werden aus dem aktuellen Koordinaten-Objekt übernommen.

Ein Serializer ist nötig, weil diese Eigenschaften als Getter am Prototyp definiert sind und nicht als eigene Eigenschaften der Instanz. Ohne toJSON() hätte JSON.stringify(position.coords) in älteren Browsern nur "{}" ergeben. Diese Methode ruft man selten direkt auf: JSON.stringify() erkennt sie und verwendet sie automatisch.

Typische Anwendungsfälle sind das Senden eines Standorts per fetch() an einen Server, das Speichern in localStorage oder IndexedDB und das Protokollieren beim Debuggen. Werte, die das Gerät nicht liefern kann (z. B. altitude, heading, speed), stehen im Ergebnis als null.

Rückgabewert

Typ
Object
Beschreibung
Ein einfaches Objekt mit den Eigenschaften accuracy, latitude, longitude, altitude, altitudeAccuracy, heading und speed. Die Werte haben den Typ number oder null.

Beispiele

Koordinaten direkt als Objekt ausgeben

navigator.geolocation.getCurrentPosition(
  (position) => {
    const coords = position.coords.toJSON();
    console.log(coords);
  },
  (error) => console.error(`Fehler ${error.code}: ${error.message}`)
);
{ accuracy: 12.5, latitude: 52.52, longitude: 13.405, altitude: null, altitudeAccuracy: null, heading: null, speed: null }

Automatische Nutzung durch JSON.stringify()

navigator.geolocation.getCurrentPosition((position) => {
  // JSON.stringify ruft toJSON() automatisch auf
  const json = JSON.stringify(position.coords);
  console.log(json);
});
{"accuracy":12.5,"latitude":52.52,"longitude":13.405,"altitude":null,"altitudeAccuracy":null,"heading":null,"speed":null}

Standort an einen Server senden

const getPosition = (options) =>
  new Promise((resolve, reject) =>
    navigator.geolocation.getCurrentPosition(resolve, reject, options)
  );

const sendLocation = async () => {
  try {
    const { coords, timestamp } = await getPosition({ enableHighAccuracy: true, timeout: 10000 });
    const response = await fetch('/api/standort', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ coords, timestamp })
    });
    console.log('Gesendet:', response.status);
  } catch (err) {
    console.error('Standort konnte nicht ermittelt werden:', err.message);
  }
};

sendLocation();
Gesendet: 200

Letzten Standort in localStorage speichern

navigator.geolocation.getCurrentPosition(({ coords }) => {
  localStorage.setItem('letzterStandort', JSON.stringify(coords));

  const gespeichert = JSON.parse(localStorage.getItem('letzterStandort'));
  console.log(`Breite: ${gespeichert.latitude}, Länge: ${gespeichert.longitude}`);
});
Breite: 52.52, Länge: 13.405

// Wichtig · Fallstricke

  • Browser-Kompatibilität: toJSON() ist relativ neu (Chrome/Edge 116, Firefox 120, Safari 17.4). In älteren Browsern liefert JSON.stringify(coords) nur "{}". Als Fallback kannst du die Werte von Hand kopieren, z. B. const { latitude, longitude, accuracy } = coords;.
  • Spread und Object.keys() funktionieren nicht: { ...coords } oder Object.keys(coords) ergeben ein leeres Ergebnis, weil die Eigenschaften Getter am Prototyp sind. Verwende stattdessen coords.toJSON().
  • null-Werte: altitude, altitudeAccuracy, heading und speed sind oft null, vor allem auf Desktop-Geräten. heading ist außerdem NaN, wenn speed 0 ist. JSON.stringify() wandelt NaN in null um.
  • Kein Zeitstempel: Das Ergebnis enthält keinen timestamp. Den bekommst du über GeolocationPosition.toJSON() bzw. JSON.stringify(position).
  • Datenschutz und Sicherheit: Die Geolocation-API gibt es nur in sicheren Kontexten (HTTPS), und der Nutzer muss zustimmen. Standortdaten sind personenbezogen. Übertrage und speichere sie nur mit Einwilligung, gemäß DSGVO und möglichst sparsam (z. B. gerundet).