JSON Toolkit

Können NaN oder Infinity in JSON vorkommen

Fazit: JSON kennt nur dezimale Zahlenliterale. JSON.stringify macht NaN und Infinity ohne Warnung zu null, weshalb „das Zahlenfeld ist manchmal null“ in der Produktion immer wieder auftaucht.

Einsteiger~3 Min. LesezeitVeröffentlicht 2026-10-30Aktualisiert 2026-10-30
Was tatsächlich mit NaN und Infinity in JSON passiert

Kurz gesagt: JSON kann NaN oder Infinity nicht darstellen – JSON.stringify macht beide stillschweigend zu null – also kodieren Sie den Zustand ausdrücklich mit null plus einem Begründungsfeld oder einem dokumentierten String-Wert.

JSON.stringify({ ratio: NaN, limit: Infinity });
// '{"ratio":null,"limit":null}'

Kein Fehler, keine Warnung. Zwei Zahlen werden zu null.

Was die Grammatik erlaubt

number = [ minus ] int [ frac ] [ exp ]

Nur Dezimalzahlen. NaN und Infinity sind IEEE-754-Sentinels, keine Literale. In JSON geschrieben sind sie ungültige Bezeichner, und da sich ihre Vergleichssemantik zwischen Sprachen unterscheidet, schließt die Spezifikation sie aus, statt eine Darstellung zu wählen.

Was die einzelnen Sprachen stattdessen tun

Sprache Verhalten
JavaScript JSON.stringify Gibt stillschweigend null aus
Python json.dumps Gibt standardmäßig NaN aus (nicht standardkonform); wirft mit allow_nan=False
Go encoding/json Liefert unsupported value: NaN
Java Jackson Gibt standardmäßig den String "NaN" aus

Vier Verhaltensweisen für einen Wert. Zeigt eine sprachübergreifende API ein Zahlenfeld, das zeitweise null ist, prüfen Sie zuerst diese Schicht.

Was man stattdessen tun sollte

Dokumentierte Strings. "NaN", "Infinity" mit einem Typ-Hinweis. Kostet jeden Konsumenten eine ausdrückliche Prüfung.

null plus ein Statusfeld. Besser: {"avgLatency": null, "avgLatencyStatus": "no-sample"}. Die Begründung reist mit dem Wert.

Die Einheit überdenken. Die meisten Infinity-Ergebnisse entstehen durch Division durch null Stichproben. null zurückzugeben und „noch keine Daten“ anzuzeigen entspricht meist besser der Geschäftswahrheit als eine unendliche Zahl.

Verwandte Fallen

  • Diagrammbibliotheken brechen die Linie bei null – bestätigen Sie, dass Sie das wollen
  • JSON.stringify verwirft außerdem undefined, Funktionen und Symbole vollständig; diese Schlüssel verschwinden, statt null zu werden
  • Pythons Standard allow_nan=True erzeugt Ausgaben, die JSON.parse ablehnt

Weiterführende Literatur