我正在尝试获取Firebase中嵌套节点的密钥,但我不确定如何执行此操作。
例如在这种情况下:
我怎么知道2,3,4存在于1?
我正在考虑将值放在firebase中的单独列表中。但有更聪明的方法吗?是否有更有效的方法来获取Firebase中所有嵌套节点的密钥?
答案 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("-")
}