Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. JavaScript-Fehlerreferenz
  5. TypeError: BigInt-Wert kann nicht in JSON serialisiert werden

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

View in EnglishAlways 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 einBigInt inJSON.stringify ohne eine benutzerdefinierte Serialisierungsmethode auftritt.

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 mitJSON.stringify zu serialisieren, was standardmäßig keine BigInt-Werte unterstützt. 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 durchgeführt wird.

Es gibt mehrere Möglichkeiten, damit umzugehen:

  • Wenn Sie die Datenquelle ändern können, vermeiden Sie die Verwendung von BigInt-Werten und wandeln Sie diese zuerst in eine Zahl um (was für große Zahlen Präzisionsverluste bedeuten kann).
  • Wenn Sie den Stringifizierungsprozess ändern können, übergeben Sie eine Ersetzungsfunktion anJSON.stringify, die BigInt-Werte in Zeichenfolgen oder Zahlen umwandelt.
  • Sie können auch global eineBigInt.prototype.toJSON-Methode bereitstellen, die aufgerufen wird, wann immer ein BigInt-Wert stringifiziert wird.

Für weitere Informationen zu verschiedenen Kompromissen sieheBigInt-Referenz.

Beispiele

Bereitstellung einer benutzerdefinierten Serialisierungsmethode

Standardmäßig 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 enthält, hier sind einige Ansätze, 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 oderraw 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 eineBigInt.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

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp