使用浮点数作为密钥的Firebase

ozg*_*gur 2 python json firebase

我意识到,当我将一些JSON数据推送到我的Firebase存储中时,我从服务器得到400 HTTP错误请求,其密钥是浮点数.这是我得到的回应:

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

我发送的数据如下:

'[{"36.5": "4050952597550"}, {"41.5": "4050952597628"}]'
Run Code Online (Sandbox Code Playgroud)

我相信它在Python中完全是一个有效的JSON字符串,因为我在编码/解码时没有错误.

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

这是某种错误还是我错过了什么?

kwa*_*ord 7

它是有效的JSON,但它不是有效的Firebase.它似乎不喜欢这些时期.如果你真的必须使用浮点数作为你的属性名称(这听起来有问题),你可以尝试用其他字符替换句点,如下划线或逗号.

摘自Firebase文档中的" 创建参考"页面:

字符集限制

请注意,用于构造Firebase引用的URL可能包含任何unicode字符,但以下情况除外:

  • .(期)
  • $(美元符号)
  • [(左方括号)
  • ](右方括号)
  • #(哈希或井号)
  • /(正斜杠)

和ASCII控制字符0-31和127.

您可以使用此正则表达式检查这些字符是否存在:

/[\[\].#$\/\u0000-\u001F\u007F]/
Run Code Online (Sandbox Code Playgroud)