Base de fuego usando el número de punto flotante como clave

Me di cuenta de que recibía 400 HTTP Bad Request del servidor al insertar algunos datos JSON en mi almacenamiento Firebase cuyas claves son números de punto flotante. Aquí está la respuesta que obtuve:

{"error" : "Invalid data; couldn't parse JSON object, array, or value. Perhaps you're using invalid characters in your key names."} 

Los datos que envié son los siguientes:

 '[{"36.5": "4050952597550"}, {"41.5": "4050952597628"}]' 

Creo que es perfectamente una cadena JSON válida en Python porque no obtengo errores al codificarla o descodificarla.

 import json v = [{u'36.5': u'4050952597550'}, {u'41.5': u'4050952597628'}] print v == json.loads(json.dumps(v)) True 

¿Es esto una especie de error o me estoy perdiendo algo?

Es JSON válido, pero no es válido para Firebase. Parece que no le gustan los períodos. Si realmente tiene que usar flotantes para los nombres de sus propiedades (lo que suena cuestionable), puede intentar reemplazar los puntos con otros caracteres, como guiones bajos o comas.

Tomado de la página de Creación de Referencias en la documentación de Firebase:

Limitaciones del conjunto de caracteres

Tenga en cuenta que las URL utilizadas para construir las referencias de Firebase pueden contener cualquier carácter Unicode, excepto:

  • . (período)
  • $ (signo de dólar)
  • [(corchete izquierdo)
  • ] (corchete derecho)
  • # (signo de hash o de libra)
  • / (barra inclinada)

y los caracteres de control ASCII 0-31 y 127.

Puedes verificar la existencia de estos caracteres con esta expresión regular:

 /[\[\].#$\/\u0000-\u001F\u007F]/