Нулевой с плавающей точкой (00000000000000E + 00) в JSON не проанализирован в jQuery (Windows) / JSONLint - PullRequest
2 голосов
/ 15 июля 2011

У меня проблема с куском JSON, содержащим число с плавающей запятой 0000000000000000E + 00 (по сути, ноль).Рассмотрим, например:

{
    "a": 3199999999999999E+01,
    "b": 0000000000000000E+00,
    "c": 0,
    "d": 5
}

Нулевое число с плавающей запятой выдает ошибку при следующих обстоятельствах:

  • Запуск его через JSONLint (http://jsonlint.com/)
  • Оценка его в браузере в Windows с помощью jQuery.parseJSON (IE и Firefox, различные версии jQuery

Изменение нуля с плавающей запятой на любое ненулевое значение не доставляет хлопот.

Посмотрите также на следующий JSFiddle: http://jsfiddle.net/Gr6fq/. Когда я запускаю это в Linux, оно работает. В Windows выдает ошибку.

1 Ответ

6 голосов
/ 15 июля 2011

Похоже, что синтаксический анализатор Javascript интерпретирует крайний левый ведущий ноль как модификатор восьмеричный и продолжает анализировать текущий токен как восьмеричное число. Затем он подавляется токеном E, с которым сталкивается впоследствии.

Использование консоли Firefox 5.0:

0E+00   // Okay, parsed as 0.
00E+00  // Syntax error, identifier starts immediately after numeric literal.
...