我在" / users"
中有这样的结构{
"aaa@aaa-com":{
"email":"aaa@aaa.com",
"name": "Joseph",
},
"asd@asd-com": {
"email": "asd@asd.com",
"name": "Erik"
}
}
我查询了访问电子邮件的孩子" aaa@aaa.com" :
usersRef.queryOrderedByChild("email").queryEqualToValue("aaa@aaa.com") .observeEventType(.Value, withBlock: { snapshot in
if snapshot.exists() {
print("user exists")
} else if !snapshot.exists(){
print("user doesn't exists")
}
如果我打印(快照),我在xcode中获得控制台输出:
Snap (users) {
"aaa@aaa-com" = {
email = "aaa@aaa.com";
name = "Joseph";
};
}
在尝试此查询后,我试图找到一些获取用户名称的方法,但我没有找到方法。 我尝试过:
print(snapshot.value.objectForKey("name"))
print(snapshot.value.valueForKey("name"))
但我两个都没有。
你们知道如何获得名称价值吗?
提前致谢!!
答案 0 :(得分:2)
这个问题很古老,而且还有很多其他资源。希望如果你还没有到那里,这将有所帮助。
最简单的方法是将snapshot.value
投射到[String: AnyObject]
类型。然后,您可以访问内部节点。
usersRef.queryOrderedByChild("email")
.queryEqualToValue("aaa@aaa.com")
.observeEventType(.Value, withBlock: { snapshot in
// if you know that your value will not be nil, then you can unwrap like below
//let foo = snapshot.value as! [String: AnyObject]
if let foo = snapshot.value as? [String: AnyObject] {
let name = foo["name"] as? String
let email = foo["email"] as? String
}
}
Swift 3
usersRef.queryOrdered(byChild: "email")
.queryEqual(toValue: "aaa@aaa.com")
.observe(.value, with: { snapshot in
// if you know that your value will not be nil, then you can unwrap like below
//let foo = snapshot.value as! [String: AnyObject]
if let foo = snapshot.value as? [String: AnyObject] {
let name = foo["name"] as? String
let email = foo["email"] as? String
}
}
根据您的查询,鉴于您在JSON树中的位置,上述内容应该适合您。
如果您在users
节点的树中处于一级,并希望获得所有值,则可以像这样访问:
usersRef.observe(.value, with: { snapshot in
let users: [User] = []
for item in snapshot.children {
if let foo = item.value as? [String: AnyObject] {
let user = User()
user.name = foo["name"] as? String
user.email = foo["email"] as? String
users.append(user)
}
}
}
答案 1 :(得分:0)
尝试将快照转换为像这样的NSDictionary
snap.value! as! NSDictionary
确保快照不是
答案 2 :(得分:-3)
试试这个:
var ref = new Firebase("https://YOUR-URL.firebaseio.com/");
ref.orderByChild("location").equalTo("United States").on("child_added", function(snapshot) {
document.write(snapshot.key());
console.log(snapshot.key());
});
将location
替换为email
,将name
和United Sates
替换为您要搜索的参数。
BTW,document.write(snapshot.key())
实际上会将snapshot
打印到HTML
网页上,而不仅仅是在控制台中!