【问题标题】:Getting specific value of a key from child of child data in Firebase with Swift使用 Swift 从 Firebase 中的子数据的子数据中获取键的特定值
【发布时间】:2016-12-06 21:12:18
【问题描述】:

你好,我有一个这样的数据模型;

{
  "users" : {
    "User1" : {
      "flat1" : {
        "flataddress" : "adres1",
        "flatname" : "n1"
      },
      "flat2" : {
        "flataddress" : "adress2",
        "flatname" : "n2"
      }
    },
    "user2" : {
      "flat3" : {
        "flataddress" : "a3",
        "flatname" : "n1"
      },
      "flat4" : {
        "flataddress" : "a6",
        "flatname" : "a6"
      }
    }
  }
}

假设 user1,user2,flat1,flat2 是一些类似“3DSAZDSAPOYDZ”的 ID。 第一个问题是如何获得所有 flataddress = "adres1" 的公寓?

第二个问题是,如果我需要检索所有公寓,则存在无法猜测的 ID,如果我执行 ref.getChild("users"),则从快照中检索 userID;

       {
  "users" : {
    "User1" : {
      "flat1" : {
        "flataddress" : "adres1",
        "flatname" : "n1"
      },
      "flat2" : {
        "flataddress" : "adress2",
        "flatname" : "n2"
      }
    },
    "user2" : {
      "flat3" : {
        "flataddress" : "a3",
        "flatname" : "n1"
      },
      "flat4" : {
        "flataddress" : "a6",
        "flatname" : "a6"
      }
    }
  }
}

已经包含了用户 ID,我想要这样的东西;

{

            flat1 =         {
                flataddress = adres1;
                flatname = n1;
            }
            flat2 =         {
                flataddress = adress2;
                flatname = n2;
            }


            flat3 =         {
                flataddress = a3;
                flatname = n1;
            }
            flat4 =         {
                flataddress = a6;
                flatname = a6;
            }

    }

提前致谢。

【问题讨论】:

  • 你能展示你试图解析这个的代码吗?
  • 我无法解析代码,因为我现在知道我需要写什么。一个问题是,如果节点键是动态的,我如何在 swift 中使用此模型获得地址 = a3 的单位。

标签: mongodb firebase nosql


【解决方案1】:

让我们将您的主要回复称为jsonDict。如果您想进入每个字典,您会这样做:

//make an empty array to put your dictionaries in
var flatsDictArray = [[String: AnyObject]]()

//first you have to unwrap each level of the dictionary response
guard let usersDict = jsonDict["users"] as? [String: AnyObject] else {
  //do something here if your json response is not what you expected
  //print usersDict below if you want to see what it looks like
  print(usersDict)
  return
}

//below we access the keys and values in the usersDict
//obj is the key, value is the value
for (obj, value) in usersDict {
  if let userFlats = value as? [String: AnyObject] {
    flatsDictArray.append(userFlats)
  }
}

由于您的 JSON 响应的结构方式,flatsDictArray 将有两个字典,每个字典将有两个带有上面列出的 JSON 响应的键。因此,它们将按每个用户的单位进行排序。

因此,flatsDictArray 将是:

["flat1": [flataddress: adres1,
           flatname: n1],
 "flat2": [flataddress: adress2,
           flatname: n2]],
["flat3": [flataddress: a3,
           flatname: n1],
 "flat4": [flataddress: a6,
           flatname = a6]]

如您所见,您可以按照我的方式逐级遍历字典以查找键或值,因此,如果您需要找到一个等于某个值的值,您可以按照相同的方式进行操作。

for(obj, value) in myLovelyDictionary {
  if value == "address1" {
  //do something
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 2017-07-04
    • 1970-01-01
    • 2019-10-31
    • 2020-09-04
    • 1970-01-01
    相关资源
    最近更新 更多