如何检索Firebase Swift中不同密钥下存储的数据?

问题描述:

我建立一个应用程序,允许用户扫描条形码和商店的图书信息,并检索他们到一个TableView中。这些书籍存储在当前用户ID - >书籍 - >书名 - >标题,作者..等等。见下面的JSON结构: -如何检索Firebase Swift中不同密钥下存储的数据?

JSON Data Structure

因此,有书有不同的名称,每一个新的书被扫描时,它会在“图书”补时。

我如何获得的所有书籍的数据以不同的名字?

下面的代码,在这里我想在TableViewController检索数据:

var posts = [BooksFromFirebase]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    //get reference to data location 
    let databaseRef = Database.database().reference() 

    //get current user id 
    let user = Auth.auth().currentUser 

    databaseRef.child("users").child((user?.uid)!).child("books").observe(.value, with: { (snapshot) in 

     if let value = snapshot.value as? [String: AnyObject]{ 
     let assetTitle = value["title"] as? String ?? "" 
     print("Title ",assetTitle) 
     let title = assetTitle 
     let type = "Book" 

     self.posts.insert(BooksFromFirebase(title: title, type: type), at: 0) 
     self.tableView.reloadData() 
     } 
    })  
} 
+0

哪里错误?尝试打印'databaseRef.child(“users”)。child((user?.uid)!)。child(“books”)',你会得到想要的路径吗? – Dravidian

+0

感谢您回复@Dravidian。显然,没有任何错误。路径工作正常,我正在获取数据。但是,如果您看到我的JSON结构,我将书籍存储在每本书的标题下。所以我不确定如何调用每本书来检索其中的数据。在这种情况下,每本书都有一个唯一的名称。 – Miki

+0

例如,我不能这样做: 'databaseRef.child( “用户”)子(?!(用户.uid))子( “书”).child( “书的NAME”)',因为书的名字各不相同。 – Miki

尝试使用这样的: -

Database.database().reference().child("users/(user!.uid)/books").observeSingleEvent(of: .value, with: {(Snapshot) in 


      if let eachDict = Snapshot.value as? NSDictionary{ 

       for each in eachDict{ 

        print(each.key ?? "No Data") 
        print(each.value ?? "No Data") 
        print((each.value as! NSDictionary)["title"] ?? "No data") 

       } 
      } 

    }, withCancel: {(Err) in 

     // Handle error encountered while communicating via firebase 

    }) 
+0

谢谢@Dravidian。没有任何打印声明起作用。但是,我打印出“每个”就在IF语句之前,我得到这样的:'快(临床医学牛津手册){ 作者=“穆雷朗莫尔”; comments =“在这里添加文本...”; isbn = 9780199609628; publisher =“牛津大学出版社”; title =“牛津临床医学手册”; } 快照(编程面试攻略:秘密登陆你的下一个工作){ 作者=“诺亚Suojanen和Eric Giguere约翰·蒙根”; comments =“在这里添加文本...”; isbn = 9788126512744; ' ......等等 – Miki

+0

回答更新... – Dravidian

+0

作品!谢谢! @Dravidian – Miki