Yazma sırasında, JSON yalnızca RFC4627'de açıklanmıştır . JSON metnini ("2" nin başında) serileştirilmiş bir nesne veya dizi olarak tanımlar.
Bu , ayrıştırıcılarda ve dizgi oluşturucularda bu standarda bağlı olan yalnızca {}
ve []
geçerli, eksiksiz JSON dizeleri anlamına gelir .
Bununla birlikte , ECMA-404'ün tanıtımı bunu değiştirir ve güncellenmiş tavsiyeler burada okunabilir . Ayrıca konuyla ilgili bir blog yazısı da yazdım .
Ancak konuyu daha da karıştırmak için , web tarayıcılarında bulunan JSON
nesne (örn. JSON.parse()
Ve JSON.stringify()
) ES5'te standartlaştırılmıştır ve bu, kabul edilebilir JSON metinlerini şu şekilde açıkça tanımlar:
Bu spesifikasyonda kullanılan JSON değişim formatı, tam olarak RFC 4627 tarafından iki istisna dışında açıklanmıştır:
Bu , JSON nesnesi teknik olarak RFC 4627'ye uysa bile , tüm JSON değerlerinin (dizeler, boş değerler ve sayılar dahil) JSON nesnesi tarafından kabul edildiği anlamına gelir .
Bu nedenle, uygun bir tarayıcıdaki bir sayıyı, JSON.stringify(5)
RFC4627'ye uyan ancak yukarıda listelenen özel bir istisna içermeyen başka bir ayrıştırıcı tarafından reddedilebileceğini unutmayın. Örneğin Ruby, yalnızca kök olarak nesneleri ve dizileri kabul eden bir örnek gibi görünmektedir . PHP ise "skaler türleri ve NULL kodlayacağı ve deşifre edeceği" özel durumunu ekler .