python - Firebase 实时数据库 - 无法将文档读取为 json/字典
问题描述
在我的实时数据库中,我有一个路径 /stats ,其中包含一组文档。
我想使用 python sdk 获取 /stats 文档作为字典。我的代码看起来像这样
path = "/stats"
ref = db.reference(path, firebase_app)
document = ref.get()
print(document)
输出是
[None, {'name': 'Full Time Statistics', 'thumbnail': 'https://***', 'url': 'https://***'}]
这是一个列表而不是字典。如何更改它并将此文档路径作为字典读取
{"1": {'name': 'Full Time Statistics', 'thumbnail': 'https://***', 'url': 'https://***'}}
另一方面,我可以毫无问题地获得具有与字典相似结构的其他文档。为什么会这样以及如何解决?
解决方案
这里发生了两件事:
- 由于您正在检索
/stats
,因此您将获得所有节点。由于这是一个重复列表并且 Firebase 实时数据库键是字符串,因此您通常会得到一个字典(字典中的键是 JSON 中的键)。 - 由于您的键是数值,Firebase“认为”您正在尝试存储一个数组/列表,它会尝试将数据强制转换为您的数组。这就是为什么您会
None
在列表中获得一个条目:那是 Firebase 为您填充第零个元素。
不幸的是,没有办法禁用这个数组强制。我通常通过在键前面加上一个固定的字符串来绕过它,以便 Firebase 绕过它的数组逻辑。所以:
stats: {
stat1: { ... },
stat2: { ... }
}
另见:
推荐阅读
- reactjs - 从函数中的json返回数据
- javascript - 通过单击 Button 元素检查 CheckBox
- java - MongoTemplate AnnotationBasedPersistentProperty.isWritable 并发问题
- swift - Alamofire + 结合 publishDecodable 到 Future
- node.js - 在 MongoDB / NodeJS 上创建文档之前检查是否已经存在字段
- php - 避免其他用户,除了财产所有者访问 laravel 中的某些特定 url
- haskell - Haskell 多态类型
- c# - 如何使用 asp.net mvc 在视图中创建复选框列表?
- eclipse - PyDev 安装问题。(PyDev/Eclipse)
- api - 通过 Shopify API 对客户进行静默身份验证