2017-07-07 2 views
0

Ich habe derzeit Code, der die JSON-Daten nehmen wird, die ich ihm gebe und es parse aber ich habe alles in eine for-Schleife gewickelt und ich weiß nicht, wie ich es herausnehmen soll.Konvertiere JSON DATEN in verwendbare Variablen in Swift 3

JSON-Daten:

[ 
{ 
"id": 1, 
"displayName": "Jacob Blacksten", 
"department": "DF", 
"mamager": "San", 
"office": "NYC", 
"util": 2 
} 
] 

Arbeitscode:

do { 
    let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) 

     guard let array = json as? [Any] else {return} 

     for user in array { 
      guard let userDict = user as? [String: Any] else {return} 
      guard let id = userDict["id"] as? Int else { return } 
      guard let name = userDict["displayName"] as? String else { return} 
      guard let department = userDict["department"] as? String else {return} 
      guard let manager = userDict["mamager"] as? String else {return} 
      guard let office = userDict["office"] as? String else {return} 
      guard let util = userDict["util"] as? Int else {return} 

       print(id) 
       print(name) 
       print(department) 
       print(manager) 
       print(office) 
       print(util) 
      } 

     } catch{ 
      print(error) 
     } 

Sie alles, was auffällt, ist, innerhalb einer for-Schleife ein Array aller "Benutzer" zu schaffen. Allerdings habe ich nur einen Benutzer und ich möchte in der Lage sein, sagen "ID" und verwenden Sie es als Variable, um es später in einem Etikett in meiner App auszudrucken. Ich hoffe das macht Sinn. Ich möchte im Grunde nur diese JSON-Daten so manipulieren, dass ich sie verwenden und in Labels in meiner App drucken kann.

+0

Warum weisen Sie einen Typ mit 'mutableContainers' zu einer unveränderlichen Konstante (' lassen json')? – vadian

Antwort

1

Wenn Sie versuchen, Ihre Variablen woanders zu verwenden, müssen Sie sie nur in etwas außerhalb des Bereichs Ihrer Schleife speichern. Ich würde vorschlagen, eine Benutzerklasse zu erstellen und die Werte von dem JSON zu einer Instanz von Benutzer zu speichern.

// User.swift 
class User { 
    // Identifier 
    let id: Int 

    // Instance variables 
    var name: String? 
    var department: String? 
    var manager: String? 
    var office: String? 
    var util: Int? 

    init(withId id: Int) { 
     self.id = id 
    } 
} 

Dann können Sie nur Ihre Schleife ändern, um so etwas zu sein.

var user: User? 

do { 
    let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) 

    guard let array = json as? [Any], 
     let userDict = array[0] as? [String: Any], 
     let id = userDict["id"] as? Int, 
     let name = userDict["displayName"] as? String, 
     let department = userDict["department"] as? String, 
     let manager = userDict["manager"] as? String, 
     let office = userDict["office"] as? String, 
     let util = userDict["util"] as? Int else { 
     return 
    } 

    user = User(withId: id) 

    user.name = name 
    user.department = department 
    user.manager = manager 
    user.office = office 
    user.util = util 

} catch{ 
    print(error) 
} 

// Here, the user variable has all the updated info 
userIdLabel?.text = "\(user?.id)" 

Hinweis: Hat das alles in Browser nicht getestet