2010-11-11 2 views
45

Простые символы, такие как пробелы, табуляции и возврат каретки, игнорируются в json-строках?Являются ли пробельные символы несущественными в JSON?

Например, is {"a":"b"}{"a" : "b"}?

+0

пробелы не являются технически пустыми символами – Falmarri

+18

технически ваш мозг должен был разобрать «пустым» как «пробел» – mk12

ответ

55

Да, пробелы вне строкового литерала с двойными кавычками игнорируются в синтаксисе. В частности, производство 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 
     ) 
+0

Спасибо. Я читал RFC, но не знал, что это за язык грамматики, а именно, что означал *. – nomen

+1

* = ноль или более (из регулярных выражений) – kevinarpe

+0

Что касается пробелов, встроенных в числовые значения: {"a": 12} эквивалентно {"a": 1 2} Я интерпретирую определение "Незначительные пробелы разрешены до или после любого из шести структурных символов ", чтобы подразумевать, что пробел НЕ допускается внутри числового значения или даты – aeropapa17

3

В стандартном формате JSON, пробелы вне строковых литералов игнорируется, как уже было сказано.

Однако, поскольку ваш вопрос отмечен C#, я должен отметить, что есть хотя бы один другой случай в C# /. NET, где пробел в JSON имеет значение.

DataContractJsonSerializer использует специальное свойство __type для поддержки десериализации для соответствующего подкласса. Это свойство должно быть первым свойством в объекте и не иметь пробелов между именем свойства и предшествующим {. См. Эту предыдущую тему: DataContractJsonSerializer doesn't work with formatted JSON?

По крайней мере, я протестировал, что требование без пробелов истинно с .NET 4. Возможно, это будет изменено в будущей версии, чтобы привести ее в соответствие со стандартом JSON ?

+0

Опасность, будет Робинсон! – wprl

Смежные вопросы