如何解析Firebase中含动态邮箱键的响应数据?
解析Firebase动态键与固定键数据的方案
1. 提取固定键数据
levels、listofacceptedplayers、numofplayers、time是已知固定键,直接通过键名提取对应数据即可,和常规JSON解析逻辑一致。
以JavaScript为例:
const dateSnapshot = snapshot.data['04-24-2023']; // 提取固定字段 const fixedData = { levels: dateSnapshot.levels, listofacceptedplayers: dateSnapshot.listofacceptedplayers, numofplayers: dateSnapshot.numofplayers, time: dateSnapshot.time };
以Dart为例:
Map<String, dynamic> dateSnapshot = snapshot.data['04-24-2023']; // 提取固定字段 final fixedData = { 'levels': dateSnapshot['levels'], 'listofacceptedplayers': dateSnapshot['listofacceptedplayers'], 'numofplayers': dateSnapshot['numofplayers'], 'time': dateSnapshot['time'], };
2. 提取动态键中的邮箱信息
动态键统一以host-为前缀,核心逻辑是遍历所有键名,筛选出符合前缀的键,再移除前缀得到邮箱地址。
JavaScript示例:
const hostEmails = []; // 遍历所有键 Object.keys(dateSnapshot).forEach(key => { if (key.startsWith('host-')) { // 移除前缀获取邮箱 const email = key.replace('host-', ''); hostEmails.push(email); // 若每个host键下还有对应数据,可一并保存 // hostEmails.push({ email: email, hostData: dateSnapshot[key] }); } });
Dart示例:
final hostEmails = <String>[]; // 遍历所有键 dateSnapshot.keys.forEach((key) { if (key.startsWith('host-')) { // 移除前缀获取邮箱 final email = key.replaceFirst('host-', ''); hostEmails.add(email); // 如需保留host对应的数据,可改为: // hostEmails.add({'email': email, 'hostData': dateSnapshot[key]}); } });
补充说明
这种存储方式确实能避免多人创建同日期数据时的覆盖问题,通过host-邮箱的动态键区分不同用户的记录。如果后续需要对host相关数据做操作,提取时可以同时保存键对应的值,方便后续使用。
内容的提问来源于stack exchange,提问作者Pierre Louet
相关产品推荐
相关产品推荐

