sending NaN in json
PythonJsonSerializationNanPython Problem Overview
I am trying to encode an array which contains floats and NaN
into JSON string from Python using json.dumps()
.
But the encoded JSON string is not being decoded successfully in PHP. Is the NaN
causing this problem? How can I work around this situation?
Python Solutions
Solution 1 - Python
json.dumps
has an allow_nan
parameter, which defaults to True.
NaN, Infinity and -Infinity are not part of JSON, but they are standard in Javascript, so they're commonly used extensions. If the recipient can't handle them, set allow_nan=False
. But then you'll get ValueError when you try to serialise NaN.
Solution 2 - Python
The simplejson package on which Python's standard json package is based moves more quickly, and handles this situation. NaN
is not valid JSON, and the ignore_nan
flag will handle correctly all NaN
to null
conversions.
import simplejson as json
json.dumps(thing, ignore_nan=True)
The default
parameter will allow simplejson to parse your datetimes correctly.
json.dumps(response, ignore_nan=True, default=datetime.datetime.isoformat)
simplejson can be installed with pip.
pip install simplejson
Solution 3 - Python
NaN is not a valid JSON symbol, see the spec at http://json.org/
Your encoder should probably have encoded the NaN as null
instead.