2016-09-15 8 views
8

Ich habe einen Bär einer Zeit, die einfache JSON-Serialisierungsprinzipien mit Swift 3 versteht. Kann ich bitte Hilfe bei der Dekodierung von JSON von einer Website in ein Array bekommen, damit ich darauf als jsonResult["team1"]["a"] usw. zugreifen kann? Hier ist relevant Code:JSONSerialization with Swift 3

let httprequest = URLSession.shared.dataTask(with: myurl){ (data, response, error) in 

self.label.text = "RESULT" 

    if error != nil { 

     print(error) 

    } else { 

     if let urlContent = data { 

      do { 

       let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: 
        JSONSerialization.ReadingOptions.mutableContainers) 

       print(jsonResult) //this part works fine 

       print(jsonResult["team1"]) 

       } catch { 

        print("JSON Processing Failed") 
       } 
      } 
     } 
    } 
    httprequest.resume() 

die eingehende JSON ist:

{ 
team1 = { 
    a = 1; 
    b = 2; 
    c = red; 
}; 

team2 = { 
    a = 1; 
    b = 2; 
    c = yellow; 
}; 
team3 = { 
    a = 1; 
    b = 2; 
    c = green; 
}; 
} 

Dank

Antwort

10

In Swift 3, der Rückgabetyp von JSONSerialization.jsonObject(with:options:) hat Any worden.

(Sie können es in der Schnellhilfefenster Ihres Xcode überprüfen, mit dem Zeigen auf jsonResult.)

Und Sie alle Methoden oder Indizes für die Variable nicht aufrufen können als Any eingegeben haben. Sie benötigen eine explizite Typkonvertierung, um mit Any zu arbeiten.

if let jsonResult = jsonResult as? [String: Any] { 
     print(jsonResult["team1"]) 
    } 

Und der Standardelementtyp von NSArray hat der Standardwert Typen NSDictionary auch Any werden. (All diese Dinge werden einfach als "id-as-Any", SE-0116.)

Also, wenn Sie tiefer in Ihre JSON-Struktur gehen möchten, benötigen Sie möglicherweise eine andere explizite Typumwandlung.

 if let team1 = jsonResult["team1"] as? [String: Any] { 
      print(team1["a"]) 
      print(team1["b"]) 
      print(team1["c"]) 
     } 
0

Vielen Dank. Die Informationen von OOPer halfen. Aber, was wirklich geholfen hat, war mein json neuformatieren:

{ "teams": [ { "a": 1, "b": 2, "c": "red" }, { "a": 1, "b": 2, "c": "yellow" }, { "a": 1, "b": 2, "c": "green" } ] }