如何从firebase中的键值对中仅获取键?

时间:2017-11-30 02:55:00

标签: json swift parsing firebase firebase-realtime-database

尝试提出一些可以帮助记录firebase资源的逻辑。关于问题查了一些资源,这个问题有点类似问题而不是解决它的延伸。 SimillarQuestion。并且可用的文档没有提到任何逻辑来实现它GoogleDoc

如何只从给定的firebase json树中获取密钥?正如他们所说,一张图片说了千言万语。有下面提到的firebase设置树。并且提到的是在表格视图中向用户显示的所需输出。

--uniUsers
      |
      |Fruits
      |   |
      |   |Apple:true
      |   |Kiwi:true
      |   |Orange:true
      | 
      |Veggies
          |
          |Carrot:true
          |Onions:true
          |Lettuce:true

Swift Code

 func fetchTotalUsers(){
    let tempUniId = "Fruits"
    let refUniId = Database.database().reference(withPath: "UniUsers/\(tempUniId)")

refUniId.observe(.value, with: { (snapp) in

    print("Value><", snapp.key)
    print("Key><", snapp.value!)
   } 
     }

Swift OutPut:

  Value >< Fruits
  Key >< {
        Apple = 1;
        Kiwi = 1;
        Orange = 1;
        }

必需的输出

  Apple
  Kiwi 
  Orange

2 个答案:

答案 0 :(得分:1)

您可以使用keys属性。

来自官方文档here

  

     

只包含字典键的集合。

再次来自官方文件:

  

迭代时,键以相同的顺序出现在此集合中   因为它们出现在字典的键值对中。每个键都在   密钥集合具有独特的价值。

因此,在您的特定情况下,您可以执行以下操作:

因为你从firebase服务器获取字典

refUniId.observe(.value, with: { (snapp) in

    print("Value><", snapp.key)
    print("Key><", snapp.value!)

    if let dict = snapp.value as? [String: Any] {

        for k in dict.keys {
             print(k)
        }
    } 
}

答案 1 :(得分:0)

通过使用枚举找到我们可以一步一步地进行,但对于新手来说,选择的答案在可读性方面更有意义,除非在之前已知枚举的概念

 refUniId.observe(.value, with: { (snapp) in

     print("Count><", snapp.childrenCount)

    let enumeratorRR = snapp.children
    while let rest = enumeratorRR.nextObject() as? DataSnapshot{
    print("GotRequiredFruits",rest.key)
    }
   }