Wird irgendwo angegeben, wie groß JSON-Ganzzahlen sein können? Ich vermute, dass sie auf normale (32-Bit) Ints beschränkt sind, aber ich kann nirgendwo etwas finden, das aufgeschrieben ist. Ich muss Bezeichner codieren, die in Java lang sind, daher muss ich diese vermutlich als Zeichenfolgen in JSON speichern, um keinen Überlauf zu riskieren.
81
[-(2**53)+1, (2**53)-1]
) Wenn Sie außerhalb dieses Bereichs arbeiten, verwenden Sie entweder stringcodierte Ganzzahlen oder erwarten Sie, dass Implementierungen an Genauigkeit verlieren.RFC 7159: Das JSON-Datenaustauschformat (JavaScript Object Notation)
quelle
json
analysieren einige Implementierungen (wie das Standardmodul von Python ) beliebige Ganzzahlen, sogar über 64 Bit hinaus (integrierte Bignums).Ich habe gerade den folgenden empirischen Test mit der Chrome-Konsole (v.23 auf Mac) durchgeführt:
> var j = JSON.parse("[999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999]") undefined > j[0] 1e+228
Wenn JSON über HTTP übergeben wird, wird die Nummer in jedem Fall von Java in String konvertiert, und das Problem kann nur in Javascript auftreten.
Aus der ECMAScript-Sprachspezifikation 4.3.19 :
Welches ist, was in Wikipedia Gleitkomma-Format mit doppelter Genauigkeit definiert .
quelle