JSON Toolkit

Bisakah NaN atau Infinity muncul di JSON

Intinya: JSON hanya memiliki literal angka desimal. JSON.stringify mengubah NaN dan Infinity menjadi null tanpa peringatan, itulah sebabnya "field angka kadang-kadang null" terus muncul di produksi.

Pemula±3 menit bacaDiterbitkan 2026-10-30Diperbarui 2026-10-30
Apa yang sebenarnya terjadi pada NaN dan Infinity di JSON

Intinya: JSON tidak dapat merepresentasikan NaN atau Infinity — JSON.stringify diam-diam mengubah keduanya menjadi null — jadi nyatakan statusnya secara eksplisit dengan null plus field alasan, atau nilai string yang terdokumentasi.

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

Tanpa error, tanpa peringatan. Dua angka menjadi null.

Apa yang diizinkan tata bahasa

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

Hanya desimal. NaN dan Infinity adalah sentinel IEEE 754, bukan literal. Ditulis ke JSON, mereka adalah identifier yang tidak valid, dan karena semantik perbandingannya berbeda antar bahasa, spesifikasi mengecualikannya alih-alih memilih satu representasi.

Apa yang dilakukan setiap bahasa sebagai gantinya

Bahasa Perilaku
JavaScript JSON.stringify Diam-diam menghasilkan null
Python json.dumps Menghasilkan NaN secara default (non-standar); melempar error dengan allow_nan=False
Go encoding/json Mengembalikan unsupported value: NaN
Java Jackson Menghasilkan string "NaN" secara default

Empat perilaku untuk satu nilai. Ketika API lintas bahasa menampilkan field angka yang kadang-kadang null, periksa lapisan ini lebih dulu.

Apa yang sebaiknya dilakukan

String yang terdokumentasi. "NaN", "Infinity" dengan catatan tipe. Membebani setiap konsumen dengan pemeriksaan eksplisit.

null plus field status. Lebih baik: {"avgLatency": null, "avgLatencyStatus": "no-sample"}. Alasannya ikut bersama nilainya.

Pikirkan ulang satuannya. Sebagian besar hasil Infinity berasal dari pembagian dengan nol sampel. Mengembalikan null dan menampilkan "belum ada data" biasanya lebih sesuai dengan kenyataan bisnis daripada angka tak hingga.

Jebakan terkait

  • Pustaka chart memutus garis pada null — pastikan itu yang Anda inginkan
  • JSON.stringify juga membuang undefined, fungsi dan symbol sepenuhnya; key tersebut menghilang alih-alih menjadi null
  • allow_nan=True default di Python menghasilkan output yang ditolak JSON.parse

Bacaan lanjutan