如何解析 Firebase FDataSnapshot 对象?

Posted

技术标签:

【中文标题】如何解析 Firebase FDataSnapshot 对象?【英文标题】:how to parse a firebase FDataSnapshot object? 【发布时间】:2014-08-04 04:09:16 【问题描述】:

我的代码从 firebase 检索结构化数据,但我不清楚如何从 firebase 数据对象中获取每个值。我在***上没有找到答案,我在这里为其他初学者发布问题和答案。

我的 firebase 快照对象值:


    "08AD8779-6EEB-4449-BC77-78A661ADA72E" =     
        field1 = "to device id";
        field2 = "text message";
    ;
    "EB841471-618C-4C52-8AA0-C20AD2C947AC" =     
        field1 = "to device id";
        field2 = "text message";
    ;
 

如何将设备ID(例如“08AD8779-6EEB-4449-BC77-78A661ADA72E”)和“field1”和“field2”的值分配给NSString变量?

【问题讨论】:

您使用什么语言工作?如果您共享用于从 Firebase 获取数据的代码,也可能会有所帮助。 每个 SDK 的指南中都包含检索数据,例如:web、iosandroid 和 REST。您是否遇到了此处未涵盖的问题? 加藤,我在ios SDK指南上花了很多时间,很清楚如何获取数据(对象)的快照,但没有找到如何提取每个字段的值目的。我从 firebase 示例代码中挖掘了答案,在 *** 上发布了问题/答案,以便下一个人更容易找到。 【参考方案1】:

以下是对我有用的代码:

-(void)readFirebaseData 
    // Read data and react to changes
    [self.myRootRef observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) 

        for (FDataSnapshot* childSnap in snapshot.children) 
            NSString* otherDeviceName = childSnap.name;
            NSLog(@"otherDeviceName -> %@", childSnap.name);
            NSLog(@"otherDeviceField1 -> %@", childSnap.value[@"field1"]);
            NSLog(@"otherDeviceField2 -> %@", childSnap.value[@"field2"]);
             
    ];

【讨论】:

您好,您知道如何快速实现这一目标吗? 嗨 Rom_j,我不知道如何在 swift 中做到这一点(我还没有开始学习 swift)。 这个答案已经过时了【参考方案2】:

希望这会有所帮助。FDataSnashot 上没有 name 属性,因此将其假定为带有键名的值。

        for childSnap in  snapshot.children.allObjects as [FDataSnapshot]
            let otherDeviceName = childSnap.value["name"] as NSString
            println("otherDeviceName -> \(otherDeviceName)");
            let field1 = childSnap.value["field1"]
            let field2 = childSnap.value["field2"]
            println("otherDeviceField1 -> \(field1)");
            println("otherDeviceField2 -> \(field2)");
        

【讨论】:

【参考方案3】:

其他答案还可以,但如果有人想要一个带有错误识别的干净结构:SnapshotParser

下面的代码对于获得一个完全工作的 swift 表示是必要的:

func main()
    let devices=SnapshotParser().parseAsList(snap: Snapshot, type: Device.self)


class Device: ParsableSnapshot 
    var id: String?
    var field1:String?=nil
    var field2:String?=nil

    required init()

    func bindProperties(binder: SnapshotParser.Binder) 
        binder.bindField(name: "id", field: &id)
        binder.bindField(name: "field1", field: &field1)
        binder.bindField(name: "field2", field: &field2)
    

【讨论】:

以上是关于如何解析 Firebase FDataSnapshot 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何解析来自 Firebase JSON 推送方法的数据

如何使用 Kotlin 在 Android 中处理从 Firebase Remote Config 解析 JSON 的效果方式?

无法从“src\containers\Login.js”解析“firebase”

在 Firebase 云函数中包含异步函数(eslint“解析错误:意外的令牌函数”)

如何快速解码来自 Firebase Firestore 的时间戳

找不到模块:无法解析“firebase”