2017-07-07 7 views
0

私は現在、jsonデータを取得して解析するコードを持っていますが、forループですべてが包まれていますが、取り出す方法はわかりません。スウィフト3でJSON DATAを使用可能な変数に変換する

JSONデータ:

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

の作業コード:

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) 
     } 

あなたはすべてが、すべての "ユーザー" の配列を作成するforループの内部にあるわかります。しかし、私は1人のユーザーしか持っていません。私は "id"と言う言葉を引き出し、変数として使用して、後でそれを自分のアプリケーションのラベルに印刷したいと考えています。私はこれが理にかなってほしい。私は基本的にこのJSONデータを操作して、私のアプリでラベルを使用して印刷できるようにしたいだけです。

+0

をテストしていない、すべてのブラウザでこれをしましたか? – vadian

答えて

1

他の場所で変数を使用しようとしている場合は、ループのスコープ外にある変数に変数を保存するだけで済みます。 Userクラスを作成し、jsonの値をUserのインスタンスに保存することをお勧めします。

// 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 
    } 
} 

次に、ループを次のように変更できます。

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)" 

注:なぜあなたは(json`せ `)不変定数に` mutableContainers`とタイプを割り当てない

関連する問題