Ios 如何从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

我正在尝试将JSONDecoder与FirebaseDatabase一起使用。网上有一些例子,但我还没有找到一个带有动态对象键的例子,就像我得到的响应中返回的那些。有更好的方法吗

JSON示例:

{
"-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)
        }
    })
}