如何循环并获取firebase中嵌套节点的所有键?

时间:2016-06-03 04:56:56

标签: ios swift firebase firebase-realtime-database

我正在尝试获取Firebase中嵌套节点的密钥,但我不确定如何执行此操作。

例如在这种情况下:

example

我怎么知道2,3,4存在于1?

我正在考虑将值放在firebase中的单独列表中。但有更聪明的方法吗?是否有更有效的方法来获取Firebase中所有嵌套节点的密钥?

3 个答案:

答案 0 :(得分:8)

在Android中

允许访问此快照的所有直接子项。可以在native for循环中使用:

for (DataSnapshot child : parent.getChildren()) { 
   //Here you can access the child.getKey()
}

在iOS

斯威夫特3:

for (child in snapshot.children) { 
  //Here you can access child.key
}
斯威夫特4:

snapshot.children.forEach({ (child) in
  <#code#>
})

在网络

snapshot.forEach(function(childSnapshot) {
   //Here you can access  childSnapshot.key
});

您可以将其放在不同的列表或相同的路径中,重要的是要记住在调用事件时您实际检索的数据量。你将如何查询这些信息...这就是为什么在NoSQL中建议保持平面节点

答案 1 :(得分:0)

您需要使用字典数组。 迭代每个字典然后你需要检查密钥是否存在。因为在Firebase中我们需要将特定密钥发送到服务器。

SWIFT

let key = "1"
    for child in snapshot.children {
        if let snap = child.childSnapshotForPath(key){
            print("Able retrieve value : \(snap) for key : \(key)")
        } else {
            print("Unable to retrieve value for key : \(key)")
        }
    }

目标-C

NSString *key = @"1";
for (NSDictionary *dic in array) {
    NSArray *keys = [dic allKeys];
    if ([keys containsObject:key]){

    }
}

答案 2 :(得分:0)

我找到了一种迭代嵌套json的方法,其密钥是随机的。

var ref = FIRDatabase.database().reference(withPath: "timinig")
    ref.observeSingleEvent(of: .value, with: { snapshot in
        print(snapshot.childrenCount) // I got the expected number of items
        let enumerator = snapshot.children
        while let rest = enumerator.nextObject() as? FIRDataSnapshot {
            print("-")

            print(rest.key)
            let newobj=rest.children
            while let rest1 = newobj.nextObject() as? FIRDataSnapshot {
                print(rest1.key)
            }
            print("-")
        }