web-dev-qa-db-fra.com

envoi de NaN dans json

J'essaie d'encoder un tableau qui contient des flottants et NaN en chaîne JSON de Python en utilisant json.dumps().

Mais la chaîne JSON encodée n'est pas décodée avec succès en PHP. Le NaN est-il à l'origine de ce problème? Comment puis-je contourner cette situation?

55
shreyas

json.dumps a un allow_nan paramètre, par défaut True.

NaN, Infinity et -Infinity ne font pas partie de JSON, mais ils sont standard en Javascript, donc ce sont des extensions couramment utilisées. Si le destinataire ne peut pas les gérer, définissez allow_nan=False. Mais vous obtiendrez alors ValueError lorsque vous essayez de sérialiser NaN.

39
Thomas K

NaN n'est pas un symbole JSON valide, voir la spécification sur http://json.org/

Votre encodeur aurait probablement dû encoder le NaN en tant que null à la place.

16
Soren

Le package simplejson sur lequel est basé le package json standard de Python se déplace plus rapidement et gère cette situation. NaN n'est pas un JSON valide, et le ignore_nan flag gérera correctement toutes les conversions NaN vers null.

import simplejson as json
json.dumps(thing, ignore_nan=True)

Le paramètre default permettra à simplejson d'analyser correctement vos heures de données.

json.dumps(response, ignore_nan=True, default=datetime.datetime.isoformat)

simplejson peut être installé avec pip.

pip install simplejson
15
eiTan LaVi