Являются ли пробельные символы несущественными в JSON?
Будут ли пустые символы, такие как пробелы, вкладки и возвраты каретки, игнорируются в json-строках?
Например, {"a":"b"} равно {"a" : "b"}?
Ответ 1
Да, пробелы вне строкового литерала с двойными кавычками игнорируются в синтаксисе. В частности, создание ws в грамматике JSON в RFC 4627 показывает:
Insignificant whitespace is allowed before or after any of the six
structural characters.
ws = *(
%x20 / ; Space
%x09 / ; Horizontal tab
%x0A / ; Line feed or New line
%x0D ; Carriage return
)
Ответ 2
В стандартном JSON пробелы вне строковых литералов игнорируются, как было сказано.
Однако, поскольку ваш вопрос отмечен С#, я должен отметить, что есть хотя бы один другой случай в С#/. NET, где пробел в JSON имеет значение.
В DataContractJsonSerializer используется специальное свойство __type для поддержки десериализации в правильный подкласс. Это свойство должно быть первым свойством в объекте и не иметь пробелов между именем свойства и предшествующим {. Смотрите эту тему:
DataContractJsonSerializer не работает с форматированным JSON?
По крайней мере, я протестировал, что требование no-whitespace истинно как .NET 4. Возможно, это будет изменено в будущей версии, чтобы привести его в соответствие со стандартом JSON?