Pada saat penulisan, JSON hanya dijelaskan dalam RFC4627 . Ini menjelaskan (pada awal "2") teks JSON sebagai objek atau larik berseri.
Ini berarti bahwa hanya {}
dan []
valid, string JSON lengkap dalam parser dan stringifiers yang mematuhi standar itu.
Namun , pengenalan perubahan ECMA-404 itu, dan saran yang diperbarui dapat dibaca di sini . Saya juga menulis posting blog tentang masalah ini.
Untuk membingungkan masalah ini lebih lanjut, JSON
objek (misalnya JSON.parse()
dan JSON.stringify()
) yang tersedia di browser web distandarisasi dalam ES5 , dan yang dengan jelas mendefinisikan teks JSON yang dapat diterima seperti:
Format pertukaran JSON yang digunakan dalam spesifikasi ini persis seperti yang dijelaskan oleh RFC 4627 dengan dua pengecualian:
Ini berarti bahwa semua nilai JSON (termasuk string, nulls dan angka) diterima oleh objek JSON, meskipun objek JSON secara teknis mematuhi RFC 4627.
Perhatikan bahwa karena itu Anda dapat merangkai angka di browser yang sesuai melalui JSON.stringify(5)
, yang akan ditolak oleh parser lain yang mematuhi RFC4627, tetapi yang tidak memiliki pengecualian khusus tercantum di atas. Ruby, misalnya, tampaknya merupakan salah satu contoh yang hanya menerima objek dan array sebagai root . PHP, di sisi lain, secara khusus menambahkan pengecualian bahwa "itu juga akan menyandikan dan mendekode jenis skalar dan NULL".