2017-05-16 14 views
1

Ich habe versucht, den folgenden Code zu erhalten, um eine Reihe von Informationen, die in einer UIPickerView-Klasse "Titel für Zeilen verwenden können. Der Code funktioniert nicht, mache ich jetzt, dass, wenn ich renne Das Druck-Skript gibt eine Liste aller Werte aus meinen JSON-Werten zurück. Ein Beispiel von geparktem JSON. Ich habe mir jetzt zwei Abende lang YouTube-Videos angeschaut und Informationen darüber gelesen. Jede Hilfe wäre großartig. Alles, was ich finde, sendet Parsed JSON führt zu einer Tabellenansicht.Swift Parsing JSON-Werte zu globalen Array

 { 
    date = "2017-05-01"; 
    "financial_institution" = "Your Neighbourhood C.U."; 
    "five_year" = "2.79"; 
    "four_year" = "3.15"; 
    key = 86; 
    "one_year" = "2.79"; 
    "six_months" = 0; 
    "three_year" = "3.09"; 
    "two_year" = "2.89"; 
    "variable_rate" = 0; 
} 

)

 func getJSONData() 
    { 
     let url = URL(string:"") 
     let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in 

    if error != nil { 
     print("error") 
    } 

    else { 

     if let mydata = data { 

      do { 

       let myJson = try JSONSerialization.jsonObject(with: mydata, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject 

       print(myJson) 

       var lenderName = myJson["financial_institution"] 

       for i in lenderName { 

        var lender = "financial_institution" 
        lender += "\(i)" 
        var lenderList = myJson[lender].string as String! 

        lenderNamesArray.append(lenderList) 
       } 


      } 

       catch { 
        // catch error 
       } 
      } 
     } 
    } 

task.resume() 

    } 
+0

Aber gemäß Ihrer Antwort enthält json ** financial_institution ** kein Array-Objekt. es ist nur K-V-Paar-Objekt. Sie können also dieses Objekt nicht durchlaufen. – Jaydeep

+0

Zeigen Sie die tatsächliche JSON statt eines Teils davon –

Antwort

-1

Ich gehe davon aus, dass die JSON Sie analysieren viele Kreditgeber enthält, zB:

{ 
    "lenders": [ 
     { 
     "date": "2017-05-01", 
     "financial_institution": "Your Neighbourhood C.U.", 
     "five_year": "2.79", 
     "four_year": "3.15", 
     "key": "86", 
     "one_year": "2.79", 
     "six_months": "0", 
     "three_year": "3.09", 
     "two_year": "2.89", 
     "variable_rate": "0" 
     }, 
     { 
     "date": "2017-05-01", 
     "financial_institution": "Your Neighbourhood C.U.", 
     "five_year": "2.79", 
     "four_year": "3.15", 
     "key": "86", 
     "one_year": "2.79", 
     "six_months": "0", 
     "three_year": "3.09", 
     "two_year": "2.89", 
     "variable_rate": "0" 
     }, 
     { 
     "date": "2017-05-01", 
     "financial_institution": "Your Neighbourhood C.U.", 
     "five_year": "2.79", 
     "four_year": "3.15", 
     "key": "86", 
     "one_year": "2.79", 
     "six_months": "0", 
     "three_year": "3.09", 
     "two_year": "2.89", 
     "variable_rate": "0" 
     }] 
    } 

Während ich dies nicht wirklich testen können, mit Ihren Daten, würde Ihr Code wie folgt aussehen:

func getJSONData() 
{ 
    let url = URL(string: ""); 

    let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in 

     if error != nil 
     { 
      print("error") 
     } 

     else 
     { 
      if let mydata = data 
      { 
       do 
       { 
        let myJson = try JSONSerialization.jsonObject(with: mydata, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject 

        let lenders = myJson["lenders"] as! [AnyObject]; 

        for lender in lenders 
        { 
         // This is how you access the data 
         let institution = lender["financial_institution"] as! String; 
         let fiveYear = lender["five_year"] as! CGFloat; 

         // Store the data however you are doing it 
        } 
       } 

       catch { 
        // catch error 
       } 
      } 
     } 
    } 

    task.resume() 

} 
+0

Warum werfen Sie 'Kreditgeber' auf '[AnyObject]'? Es ist eindeutig '[[String: Any]]'. Wahrscheinlich erhalten Sie einen Compilerfehler. Und warum haben Sie diese Semikola hinzugefügt? Verwenden Sie in Swift keine Semikola, es sei denn, Sie schreiben mehrere aufeinanderfolgende Befehle in einer Zeile. – vadian

+0

Ein einzelnes Kreditgeberobjekt ist [String: Any], aber das Kreditgeberobjekt ist ein Array von Kreditgebern, definiert als [AnyObject]. –

+0

Das ist falsch. Ein einzelner Kreditgeber ist ein Wörterbuch, das Kreditgeberobjekt ist ein Array von Wörterbüchern, nicht ein Array von etwas. Und der standardmäßige nicht spezifizierte JSON-Typ in Swift 3 ist 'Any', nicht' AnyObject'. – vadian