【问题标题】:Are whitespace characters insignificant in JSON?JSON中的空格字符是否无关紧要?
【发布时间】:2010-11-11 01:11:51
【问题描述】:

json 字符串中是否忽略空格、制表符和回车等空白字符?

例如,{"a":"b"} 是否等于 {"a" : "b"}

【问题讨论】:

  • 空格在技术上不是空白字符
  • 从技术上讲,您的大脑应该将“空白”解析为“空白”

标签: json


【解决方案1】:

是的,双引号字符串文字之外的空格在语法中会被忽略。具体来说,RFC 4627 中 JSON 语法中的ws 产生式显示:

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
         )

【讨论】:

  • 谢谢。我已经阅读了 RFC,但不确定这是哪种语法表示语言 - 具体来说,* 是什么意思。
  • * = 零个或多个(来自正则表达式符号)
  • 嵌入在数值中的空格怎么样:{"a":12} 是否等同于 {"a":1 2} 我解释了定义“在六个中的任何一个之前或之后都允许使用无关紧要的空格结构字符”表示不允许在数字或日期值中使用空格
  • @aeropapa17 没错,因为 1 和 2 都不是 JSON 结构字符。
【解决方案2】:

如前所述,在标准 JSON 中,字符串文字之外的空格会被忽略。

但是,由于您的问题被标记为 C#,我应该注意,在 C#/.NET 中至少还有另一种情况,其中 JSON 中的空格确实很重要。

DataContractJsonSerializer 使用特殊的__type 属性来支持反序列化到正确的子类。此属性必须是对象中的第一个属性,并且在属性名称和前面的 { 之间不能有空格。请参阅上一个线程: DataContractJsonSerializer doesn't work with formatted JSON?

至少,我已经测试过,从 .NET 4 开始,无空白要求是正确的。也许这会在未来的版本中进行更改,以使其更符合 JSON 标准?

【讨论】:

  • 危险,威尔罗宾逊!
猜你喜欢
  • 2013-09-01
  • 1970-01-01
  • 2011-04-11
  • 2014-12-31
  • 1970-01-01
  • 2021-12-03
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多