json - 将 Firebase Datasnapshot 转换为可编码的 JSON 数据

标签 json swift firebase codable

我正在使用 Firebase 数据库,我正在尝试通过 NSObject 检索和使用数据。我在运行应用程序时收到 NSUnknownKeyException 错误,导致它崩溃。

NS对象:

class WatchList: NSObject {

    var filmid: Int?

}

Firebase 代码:

ref.child("users").child(uid!).child("watchlist").observe(DataEventType.childAdded, with: { (info) in
    print(info)
    
    if let dict = info.value as? [String: AnyObject] {
        let list = WatchList()
        list.setValuesForKeys(dict)
        print(list)
    }        
}, withCancel: nil)

我不确定是什么原因造成的。

此外,为了增强此解决方案,他们采用了一种获取此数据的方法,而不是使用 NSObject,而是将 CodableJSONDecoder 与 Firebase 数据一起使用?

最佳答案

您可以简单地使用 JSONSerialization 将快照值属性从 Any 转换为 Data:

let data = try? JSONSerialization.data(withJSONObject: snapshot.value)

您还可以扩展 Firebase DataSnapshot 类型并向其添加数据和 json 字符串属性:

import Firebase 

extension DataSnapshot {
    var data: Data? {
        guard let value = value, !(value is NSNull) else { return nil }
        return try? JSONSerialization.data(withJSONObject: value)
    }
    var json: String? { data?.string }
}
extension Data {
    var string: String? { String(data: self, encoding: .utf8) }
}

用法:

guard let data = snapshot.data else { return }

关于json - 将 Firebase Datasnapshot 转换为可编码的 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53565519/

相关文章:

javascript - 如何在 ASP.NET MVC 3 的 Razor View 中编码嵌入式 javascript?

javascript - 我的 JSON HTTP 请求出现问题

ios - 当用户向右滑动以返回 View 时,您可以执行 prepareForSegue 吗?

ios - MyClass 不可用 : cannot find Swift declaration for this class

ios - 给定两组坐标,如何计算它们之间的距离?

javascript - 请求 Firebase 消息传递 token 而不在前端安装 firebase 包

firebase - Flutter:上传图像未处理的异常:PlatformException(firebase_storage,存储 Uri 不能包含路径元素。,{},null)

json - 有什么方法可以在 elasticsearch 服务器中导入 json 文件(包含 100 个文档)。?

java - JSON 对象中值的顺序是否重要?

ios - 如何在 Firebase 中更新新项目