【问题标题】:Getting JSON Key Value from Firebase Datasnapshot从 Firebase 数据快照获取 JSON 键值
【发布时间】:2018-07-10 05:50:23
【问题描述】:

与此同时,我正在使用 Firebase 开发 Flutter 应用程序,这确实很有趣,当然还有一些麻烦需要克服......

我设置了一个 Firebase 数据存储,并通过 firebase_database 插件获得了如下返回的 DataSnapshot:

FirebaseDatabase.instance.reference().child('users')
  .orderByChild('emailAddress')
  .equalTo('wonderjimmy@gmail.com').once()
  .then((onValue) {
   Map data = onValue.value;
  });

我使用一个 Map 对象来保存这个 JSON。一个愚蠢的问题:如果我只想得到值“-L474-TYYYGPvCChlZCS”,我该怎么办?

【问题讨论】:

标签: json firebase firebase-realtime-database dart flutter


【解决方案1】:

这对我有用:

.then(res => {
      // console.log(res)
      const data = res.data
      // extracting firebase ids for manipulating existing notes
      for (let key in data) {
        const item = data[key]
        item.id = key
        console.log(item.id)
      }

【讨论】:

    【解决方案2】:

    要从 DataSnapshot 访问密钥,只需使用 snapshot.key,您将在您的案例用户中拥有该项目的相对密钥

     .then((onValue) {
       onValue.map(data => {
          var key = data.key
        })
     });
    

    或者只是使用里面的firebase文档中给出的然后

    .then(function(snapshot) {
        snapshot.forEach(function(childSnapshot) {
          var key = childSnapshot.key; // you will get your key here
      });
    });
    

    【讨论】:

    • 是的,这正是我所看到的。那么如何才能在“用户”下获得值“-L474-TYYYGPvCChlZCS”?
    • 在你得到地图内的快照后,你得到的快照对吗?
    • 是的,或者任何更聪明的方法;)
    • 你是这样拿到钥匙的吗?我想这就是我知道的方式
    • 这个答案使用 JavaScript 语法。 Flutter 使用 Dart,代码看起来应该不一样。
    【解决方案3】:

    你可以通过snapshot.key获取key,你可以在这里找到它的参考:

    snapshot.forEach(function(childSnapshot) {
      var childKey = childSnapshot.key;
      var childData = childSnapshot.val();
      // ...
    });
    

    https://firebase.google.com/docs/database/web/lists-of-data#listen_for_value_events

    【讨论】:

    • 感谢您的回复,但如果使用 snapshot.key,返回值将是“users”。
    • 根据您的查询更新了响应,快照上有一个 forEach 方法使用 key 和 val() 道具迭代 childSnapshots
    • 谢谢亚历克斯,今晚让我试试。顺便说一句,我想要做的是获取子密钥然后将更新的 JSON 设置回原始位置,这样做的最佳实践是什么?迭代快照不可避免吗?
    • 当您使用返回列表或 null 的条件请求数据库快照时,您必须验证它是否存在(不为 null),将其存储为您认为合适的位置以供进一步使用,然后迭代孩子们和/或选择第一场比赛
    • 这个答案使用 JavaScript 语法。 Flutter 使用 Dart,代码应该看起来不一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2023-04-10
    相关资源
    最近更新 更多