2016-12-06 8 views
0

こんにちは私はこのようなデータモデルを持っています。Swiftを使用してFirebaseで子データの子からキーの特定の値を取得する

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

user2は、flat1、 "3DSAZDSAPOYDZ" のように形成され、いくつかのIDがflat2あり、そのUSER1を想定。 最初の質問は、flataddress = "adres1"のフラットをどうやって得ることができるのですか?

2番目の質問は、すべてのフラットを取得する必要がある場合、推測できないIDがあることです。ref.getChild( "users")を実行すると、userIDsは次のようなスナップショットから取得されます。

 { 
    "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; 
      } 

    } 

おかげ。

+0

これを解析しようとしたことでコードを表示できますか? –

+0

私は今何を書く必要があるか分かりませんので、コードを解析できません。その問題は、ノードキーが動的である場合、このモデルを迅速にアドレス指定するフラットをどのように得ることができるかという問題です。 –

答えて

0

のは、あなたが各辞書に取得したい.IF、あなたはどうしたらあなたの主応答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は、各辞書意志を2つの辞書を持っていますので上記のJSONレスポンスを持つ2つのキーがあります。そのため、ユーザーごとに平らに並べ替えられます。

したがって、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 
    } 
} 
関連する問題