[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Errors/BigInt_not_serializable [Back]  [Original]

TypeError: BigInt-Wert kann nicht in JSON serialisiert werden - JavaScript | MDN

Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.

View in English Always switch to English

TypeError: BigInt-Wert kann nicht in JSON serialisiert werden

Die JavaScript-Ausnahme "BigInt-Wert kann nicht in JSON serialisiert werden" tritt auf, wenn ein BigInt in JSON.stringify ohne eine benutzerdefinierte Serialisierungsmethode auftritt.

In diesem Artikel

Nachricht

TypeError: Do not know how to serialize a BigInt (V8-based)
TypeError: BigInt value can't be serialized in JSON (Firefox)
TypeError: JSON.stringify cannot serialize BigInt. (Safari)

Fehlertyp

TypeError

Was ist schiefgelaufen?

Sie versuchen, einen BigInt-Wert mit JSON.stringify zu serialisieren, was standardmig keine BigInt-Werte untersttzt. Manchmal erfolgt die JSON-Stringifizierung implizit in Bibliotheken als Teil der Datenserialisierung. Beispielsweise erfordert das Senden von Daten an den Server, das Speichern in externen Speichern oder das bertragen zwischen Threads eine Serialisierung, die oft mit JSON durchgefhrt wird.

Es gibt mehrere Mglichkeiten, damit umzugehen:

  • Wenn Sie die Datenquelle ndern knnen, vermeiden Sie die Verwendung von BigInt-Werten und wandeln Sie diese zuerst in eine Zahl um (was fr groe Zahlen Przisionsverluste bedeuten kann).
  • Wenn Sie den Stringifizierungsprozess ndern knnen, bergeben Sie eine Ersetzungsfunktion an JSON.stringify, die BigInt-Werte in Zeichenfolgen oder Zahlen umwandelt.
  • Sie knnen auch global eine BigInt.prototype.toJSON-Methode bereitstellen, die aufgerufen wird, wann immer ein BigInt-Wert stringifiziert wird.

Fr weitere Informationen zu verschiedenen Kompromissen siehe BigInt-Referenz.

Beispiele

Bereitstellung einer benutzerdefinierten Serialisierungsmethode

Standardmig sind BigInt-Werte nicht in JSON serialisierbar:

js
const data = { a: 1n };
JSON.stringify(data);
// TypeError: BigInt value can't be serialized in JSON

Angenommen, Sie beabsichtigen, dass das JSON einen Zahlenwert enthlt, hier sind einige Anstze, die funktionieren:

  • Wandeln Sie den BigInt vor der Stringifizierung in eine Zahl um:

    js
    const data = { a: 1n };
    JSON.stringify({ ...data, a: Number(data.a) });
    // '{"a":1}'
    
  • Stellen Sie eine Ersetzungsfunktion bereit, die BigInt-Werte in Zahlen oder raw JSON objects umwandelt:

    js
    const data = { a: 1n };
    JSON.stringify(data, (key, value) =>
      typeof value === "bigint" ? Number(value) : value,
    );
    // '{"a":1}'
    
    js
    const data = { a: 1n };
    JSON.stringify(data, (key, value) =>
      typeof value === "bigint" ? JSON.rawJSON(value.toString()) : value,
    );
    // '{"a":1}'
    
  • Stellen Sie eine BigInt.prototype.toJSON-Methode bereit, die aufgerufen wird, wann immer ein BigInt-Wert stringifiziert wird:

    js
    BigInt.prototype.toJSON = function () {
      return Number(this);
    };
    const data = { a: 1n };
    JSON.stringify(data);
    // '{"a":1}'
    
    js
    BigInt.prototype.toJSON = function () {
      return JSON.rawJSON(this.toString());
    };
    const data = { a: 1n };
    JSON.stringify(data);
    // '{"a":1}'
    

Siehe auch


Web Proxy Viewer  |  New URL  |  Original Page