2017-09-06 25 views
0

私たちはバックエンドとしてfirebaseを使用しています。我々はfirebaseから取得している応答は次のとおりです。Swift3でJSONを必要な配列形式に変換

{ 
    "2_3" =  { 
     OTI = 80; 
     OTIP = 70; 
     SPR2 = 40; 
    }; 
    "2_5" =  { 
     OTI = 60; 
     OTIP = 70; 
     SPR2 = 30; 
     SPR3 = 40; 
    }; 
    "2_8" =  { 
     OTI = 20; 
    }; 
} 

我々が望むものである:

["2_8": ["OTI": "20"], "2_3": ["SPR2": "40", "OTI": "80", "OTIP": "70"], "2_5": ["SPR2": "30", "SPR3": "40", "OTI": "60", "OTIP": "70"]] 

Swift3でこれを達成するためにどのように?また、firebaseからの応答を上記の形式で得ることができますか?

+0

だあなたは、整数などの値をたくありませんか? –

+0

これらはどちらも印刷の形式が異なります(ただし、2番目の形式では数字は文字列であり整数ではありません)。だから、あなたが達成しようとしていることのより多くの文脈を与えてください。 –

+0

まず第一に、関係する配列はありません。すべてのコレクションタイプは辞書です。第二に、出力はまさにあなたが望むフォーマットです。 'print'はオブジェクトを* objective-cish *辞書表現で表示します。 – vadian

答えて

0

ここには1つの解決策があります。それはかなり冗長であり、かなり短くすることができます。私はあなたがより簡単にロジックに従うことができるようにコメントを追加しました。

他の多くのソルトもあります。

var dataArray = [ [String: Any] ]() 

let numbersRef = self.ref.child("numbers") //assume the parent node is called numbers 
numbersRef.observeSingleEvent(of: .value, with: { snapshot in 
    for child in snapshot.children { //iterate over each child in numbers 
     let snap = child as! DataSnapshot //use the child as a snapshot 
     let key = snap.key //get it's key ie. 2_3, 2_5 etc 
     let value = snap.value as! [String: Any] //get it's children as a dictionary, looses ordering 

     let dict = [key: value] //create a dictionary of key: value 
     dataArray.append(dict) //store it 
    } 

    //to test 
    for element in dataArray { //for each element in the dataArray 
     for keyValuePair in element { //each element is a key:value pair 
      let key = keyValuePair.key //get the key 
      let value = keyValuePair.value //get the value 
      print(key, value) 
     } 
    } 
}) 

と出力(私は最初の二つのノードを使用)

2_3 ["SPR2": 40, "OTI": 80, "OTIP": 70] 
2_5 ["SPR2": 30, "SPR3": 40, "OTI": 60, "OTIP": 70] 

ここに凝縮されたバージョン

var dataArray = [ [String: Any] ]() 

let numbersRef = self.ref.child("numbers") //assume the parent node is called numbers 
numbersRef.observeSingleEvent(of: .value, with: { snapshot in 
    for child in snapshot.children { //iterate over each child in numbers 
     let snap = child as! DataSnapshot //tell the child it's a snapshot 
     dataArray.append([snap.key: snap.value as! [String: Any]]) 
    } 
}) 
関連する問題