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.

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.stringifyverwirft außerdemundefined, Funktionen und Symbole vollständig; diese Schlüssel verschwinden, stattnullzu werden- Pythons Standard
allow_nan=Trueerzeugt Ausgaben, dieJSON.parseablehnt