首页 > 解决方案 > Firebase 实时数据库 - 无法将文档读取为 json/字典

问题描述

在我的实时数据库中,我有一个路径 /stats ,其中包含一组文档。

我的firebase真实数据库结构

我想使用 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://***'}}

另一方面,我可以毫无问题地获得具有与字典相似结构的其他文档。为什么会这样以及如何解决?

标签: pythonfirebasefirebase-realtime-database

解决方案


这里发生了两件事:

  1. 由于您正在检索/stats,因此您将获得所有节点。由于这是一个重复列表并且 Firebase 实时数据库键是字符串,因此您通常会得到一个字典(字典中的键是 JSON 中的键)。
  2. 由于您的键是数值,Firebase“认为”您正在尝试存储一个数组/列表,它会尝试将数据强制转换为您的数组。这就是为什么您会None在列表中获得一个条目:那是 Firebase 为您填充第零个元素。

不幸的是,没有办法禁用这个数组强制。我通常通过在键前面加上一个固定的字符串来绕过它,以便 Firebase 绕过它的数组逻辑。所以:

stats: {
  stat1: { ... },
  stat2: { ... }
}

另见:


推荐阅读