Comment analyser chaîne JSON contenant “NaN” dans Node.js

Ont un node.js application qui reçoit les données JSON chaînes qui contiennent le littéral NaN, comme

 "[1, 2, 3, NaN, 5, 6]"

Cela se bloque JSON.parse(...) dans Node.js. Je tiens à analyser, si je peux dans un objet.

Je sais NaN ne fait pas partie de la spécification JSON. La plupart des liens (envoi NaN en json) suggèrent de fixer la sortie.

Ici, si les données sont produites dans un serveur que je ne contrôle pas, c'est par un commercial bibliothèque Java où je peux voir le code source. Et c'est produit par Google Gson bibliothèque:

private Gson gson = (new GsonBuilder().serializeSpecialFloatingPointValues().create()); 
... 
gson.toJson(data[i], Vector.class, jsonOut)

De sorte que semble comme une source légitime. Et selon la Gson API Javadoc il dit que je devrais être en mesure de l'analyser:

La Section 2.4 du JSON spécification interdit spécial double des valeurs
(NaN, L'Infini, L'Infini). Cependant, Javascript cahier des charges (voir
section 4.3.20, 4.3.22, 4.3.23) permet à ces valeurs comme valide
Javascript valeurs. En outre, la plupart des moteurs JavaScript accepte ces
valeurs spéciales en JSON sans problème. Ainsi, à un niveau pratique, il
fait sens pour accepter ces valeurs sous forme de JSON valide même si JSON
spécification empêche.

Malgré cela, il échoue dans les deux Node.js et Chrome: JSON.parse('[1,2,3,NaN,"5"]')

Est-il un indicateur de mettre en JSON.parse()? Ou un autre analyseur qui accepte NaN comme un littéral?

J'ai cherché sur Google, mais n'arrive pas à trouver une doc sur cette question.

PHP: Comment coder l'infini ou NaN numéros de JSON?

Je trouve ironique, c'est que Google Gson projet dit que JSON analyseurs devrait permettre à ces littéraux, tandis que le moteur JavaScript qui n'est pas tolérer est de Google V8.
nœud de parser JSON suit tout simplement la spec. Le "ironie" est seulement une violation de la le principe de robustesse.
Non, l'ironie est qu'un projet Google dit que "la plupart des moteurs JavaScript va accepter ces valeurs spéciales en JSON sans problème" alors que Google est le moteur JavaScript est l'une des exceptions, comme en témoigne le fait que Chrome n'aime pas la chaîne.
"La Section 1.2 décrit JSON. Cependant, le protocole TCP/IP prend en charge de nombreux autres formats, vous devriez être en mesure de décoder, compte tenu de l'effort suffisant ou le mépris pour la sécurité. Par conséquent, nous avons pensé, pourquoi se limiter à JSON?" - Google

OriginalL'auteur prototype | 2013-03-05