2011-07-06 14 views
36

Estoy tratando de codificar una matriz que contiene flotadores y NaN en una cadena JSON desde Python usando json.dumps().enviando NaN en json

Pero la cadena JSON codificada no se decodifica correctamente en PHP. ¿El NaN está causando este problema? ¿Cómo puedo evitar esta situación?

+0

¿Cómo es el aspecto de JSON? NaN no es un tipo de datos nativo en Python, por lo que estoy sorprendido de que funcione en absoluto. –

+4

@Daniel: en realidad, si haces 'float (" nan ")', puedes obtenerlo. Y al llamar 'json.dumps (float (" nan "))' te da "NaN". –

Respuesta

29

json.dumps tiene un parámetro allow_nan, que por defecto es True.

NaN, Infinity y -Infinity no son parte de JSON, pero son estándar en Javascript, por lo que son extensiones de uso común. Si el destinatario no puede manejarlos, configure allow_nan=False. Pero luego obtendrá ValueError cuando intente serializar NaN.

11

NaN no es un símbolo JSON válida, véase la especificación en http://json.org/

Su codificador probablemente debería haber codificado el NaN como null lugar.

+0

la cadena codificada json contiene nan solo – shreyas

+0

Tendrás que arreglar eso, mira el manual http://docs.python.org/library/json.html#basic-usage – Soren

8

Intente utilizar simplejson:

pip install simplejson 

Luego, en el código:

import simplejson 

response = df.to_dict('records') 
simplejson.dumps(response, ignore_nan=True,default=datetime.datetime.isoformat) 

La bandera ignore_nan controlará correctamente todos NaN -> conversiones nulos

La bandera predeterminado permitirán simplejson para analizar correctamente su fecha y hora.