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?
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.
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.
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