Ios 如何从FirebaseDatabase中使用动态密钥解码JSON
我正在尝试将JSONDecoder与FirebaseDatabase一起使用。网上有一些例子,但我还没有找到一个带有动态对象键的例子,就像我得到的响应中返回的那些。有更好的方法吗 JSON示例:Ios 如何从FirebaseDatabase中使用动态密钥解码JSON,ios,json,swift,firebase,firebase-realtime-database,Ios,Json,Swift,Firebase,Firebase Realtime Database,我正在尝试将JSONDecoder与FirebaseDatabase一起使用。网上有一些例子,但我还没有找到一个带有动态对象键的例子,就像我得到的响应中返回的那些。有更好的方法吗 JSON示例: { "-LUOhAM5W42t9YxqFkUQ" = { author = { name = testName; }; commentCount = 0; detail = ""; id = "-LUOhAM5W42t9Yx
{
"-LUOhAM5W42t9YxqFkUQ" = {
author = {
name = testName;
};
commentCount = 0;
detail = "";
id = "-LUOhAM5W42t9YxqFkUQ";
likeCount = 0;
};
"-LUOhNU4wfwTlZQkrGFu" = {
author = {
name = otherName;
};
commentCount = 0;
detail = "";
id = "-LUOhNU4wfwTlZQkrGFu";
likeCount = 0;
};
我的结构如下所示(我只是尝试先成功解码):
控制器中的代码如下所示:
func getPosts() {
Database.database().reference().child("posts").observeSingleEvent(of: .value, with: { (snapshot) in
guard let value = snapshot.value else { return }
print("VALUE: \(value)")
do {
let person = try FirebaseDecoder().decode(Post.self, from: value)
print(person)
} catch let error {
print(error)
}
})
}
我知道我可以循环遍历每个对象,解码,然后将它们添加到数组中,但我正在寻找最有效的方法,我真的很喜欢JSONDecoder。同样,问题似乎是Firebase将对象键放在每个对象的开头,这似乎很奇怪。任何帮助都将不胜感激 您可以解码
[String:Post]
并查看值,如果您不关心keys@dan我可以让这个工作,但它会导致大量额外的设置。这些帖子都是按时间顺序返回的,所以如果我把它们放到字典里,那就没用了,我必须在前端重新排序。当我开始向原始响应添加新帖子时,在带有分页的活动提要中,这将特别低效。与Firebase observe一起返回的快照是所有帖子,而不仅仅是一篇。您需要在快照上进行迭代,以使每个帖子都可以使用。i、 self是一篇文章,快照包含一堆。
func getPosts() {
Database.database().reference().child("posts").observeSingleEvent(of: .value, with: { (snapshot) in
guard let value = snapshot.value else { return }
print("VALUE: \(value)")
do {
let person = try FirebaseDecoder().decode(Post.self, from: value)
print(person)
} catch let error {
print(error)
}
})
}