На момент написання повідомлення JSON описувався виключно в RFC4627 . Він описує (на початку "2") текст JSON як серіалізований об'єкт або масив.
Це означає, що лише {}
і []
є дійсними повні рядки JSON в аналізаторах та стрипфіфікаторах, які відповідають цьому стандарту.
Однак введення ECMA-404 змінює це, а оновлені поради можна прочитати тут . Я також написав публікацію в блозі з цього питання.
Однак для подальшої плутанини, JSON
об'єкт (наприклад, JSON.parse()
та JSON.stringify()
), доступний у веб-браузерах, стандартизований у ES5 , і це чітко визначає прийнятні тексти JSON на зразок:
Формат обміну JSON, використаний у цій специфікації, точно такий, який описаний RFC 4627 за двома винятками:
Це означатиме, що всі значення JSON (включаючи рядки, нулі та числа) приймаються об'єктом JSON, навіть якщо об'єкт JSON технічно відповідає RFC 4627.
Зауважте, що ви можете, таким чином, впорядкувати номер у відповідному браузері через JSON.stringify(5)
, який би був відхилений іншим аналізатором, який дотримується RFC4627, але не має конкретного винятку, перерахованого вище. Наприклад, Ruby, здається, є одним з таких прикладів, який приймає лише коріння об'єктів і масивів . PHP, з іншого боку, спеціально додає виняток, що "він також кодує та декодує скалярні типи та NULL".