2016-10-04 116 views
1

这是我的JSON嵌套DB的样子:检索火力地堡数据库的值,嵌套数据

enter image description here

它是一种pets根具有多个唯一的ID。然后每个ID代表一个有一些属性的宠物,其中一些(如feedingListwalkingList)也包含更多代表进餐/散步的值以及它们的时间和完成布尔值。

我已经在Swift中编写代码来检索一些值,但我遇到问题达到那些fListwList

func getPetInfo() { 

     let refMeals = reff.child("pets") 
     refMeals.observe(.value, with: { (snapshot) in 

      if let snapCast = snapshot.value as? [String:AnyObject]{ 
       for snap in snapCast{ 
        if self.currentUser.pets.contains(snap.key) { 
         if let x = snap.value["name"] as? String{ 
          self.tempPet.name = x 
          print(x) 

         } 
         if let y = snap.value["type"] as? String{ 
          //self.tempPet.type = y 
          print(y) 

         } 
         if let z = snap.value["age"] as? Int{ 
          //self.tempPet.age = z 
          print(z) 
         } 
         print(snap.value["fList"]) 
         if let w = snap.value["fList"] as? [String:AnyObject]{ 
          for snippete in w { 
           if let a = snippete.value["time"] as? String{ 
            //self.tempPet.feedingList.append(a) 
            print(a) 
           } 
           if let b = snippete.value["doneForToday"] as? Bool{ 
            //self.isItDoneForToday.append(b) 
            print(b) 
           } 
          } 
         } 
         if let r = snap.value["wlist"] as? [String:AnyObject]{ 
          for snippete in r { 
           if let c = snippete.value["time"] as? String{ 
            //self.tempPet.feedingList.append(a) 
            print(c) 
           } 
           if let d = snippete.value["doneForToday"] as? Bool{ 
            //self.isItDoneForToday.append(b) 
            print(d) 
           } 
          } 
         } 
         //self.petArray.append(self.tempPet) 
        } 
       } 
      } 
     }) { (error) in 
      print(error.localizedDescription) 
     } 
    } 

这一切都打印出来好了nameagetype,但是当涉及到这行代码:

if let w = snap.value["fList"] as? [String:AnyObject] 
... 

它不让它并没有什么打印出来。你能告诉我我错了吗?我显然无法理解这个JSON树的值和数组。当我试图理解什么是get并转换为什么时,这是一团糟。提前致谢。

这就是被打印出来:

blasted 
cat 
3 
Optional(<__NSArrayM 0x60800024f000>(
{ 
    doneForToday = 0; 
    time = "12:00"; 
} 
) 
) 
+0

看来FLIST和wList是数组不是字典! – iShaalan

+0

你是什么意思?我的意思是“宠物”(在我的数据库中的第一张图片上)以 [字符串是ID:具有更多内容的AnyObject], 作为字典呈现,我希望那些fList元素表示为 [字符串是数字:有更多东西的AnyObject] – NikolaM

回答

1

试试这个: -

if let r = snap.value["wlist"] as? [Int:AnyObject]{ 
         for snippete in r { 
          if let c = snippete.value["time"] as? String{ 
           //self.tempPet.feedingList.append(a) 
           print(c) 
          } 
          if let d = snippete.value["doneForToday"] as? Bool{ 
           //self.isItDoneForToday.append(b) 
           print(d) 
          } 
         } 
        } 
        //self.petArray.append(self.tempPet) 
       } 
+0

不,它不能解决问题。我已经将那些“0”和“1”的值设置为一个字符串,所以它不是一个Int。 – NikolaM

+0

@ frank-van-puffelen你能帮我解决吗? – NikolaM

+0

你能想到任何其他原因,为什么这不起作用。我坚持这一点,不知道如何继续 – NikolaM