У вас есть приложение node.js, которое получает строки данных JSON, которые содержат литерал NaN, например
"[1, 2, 3, NaN, 5, 6]"
Сбой JSON.parse(...)
в node.js. Я хотел бы проанализировать его, если я могу в объект.
Я знаю, что NaN
не входит в спецификацию JSON. Большинство ссылок SO (отправка NaN в json) позволяют исправить выход.
Здесь, хотя данные создаются на сервере, который я не контролирую, это коммерческая библиотека Java, где я могу видеть исходный код. И это было сделано в библиотеке Google Gson:
private Gson gson = (new GsonBuilder().serializeSpecialFloatingPointValues().create());
...
gson.toJson(data[i], Vector.class, jsonOut)
Итак, это похоже на законный источник. И согласно Gson API Javadoc, он говорит, что я должен разбираться в нем:
Раздел 2.4 спецификации JSON запрещает специальные двойные значения (NaN, Infinity, -Infinity). Однако спецификация Javascript (см. раздел 4.3.20, 4.3.22, 4.3.23) позволяет использовать эти значения как действительные Значения Javascript. Более того, большинство движков JavaScript будут принимать эти специальные значения в JSON без проблем. Итак, на практическом уровне это имеет смысл принимать эти значения как действительные JSON, хотя JSON спецификация запрещает их.
Несмотря на это, это не работает как в node.js, так и в Chrome: JSON.parse('[1,2,3,NaN,"5"]')
Есть ли флаг для установки в JSON.parse()? Или альтернативный синтаксический анализатор, который принимает NaN
как литерал?
Я некоторое время искал Google, но, похоже, не нашел документа по этой проблеме.
PHP: как кодировать бесконечные числа или числа NaN для JSON?