2017-03-31 134 views
0

在我的项目字典的打印和存储阵列我有字典的数组:iOS版 - 斯威夫特3

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

简单地说,我做的是从一个网址下载一个JSON文件

//  json parsing 2 
     let url:String = "https://jsonplaceholder.typicode.com/users" 
     let urlRequest = URL(string: url) 
     URLSession.shared.dataTask(with: urlRequest!, completionHandler: {(data, response, error) in 
      if(error != nil) 
      { 
       print(error.debugDescription) 
      }else{ 
       do { 
        self.list = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) 
         as! [[String: Any]] 
        OperationQueue.main.addOperation { 
         self.tableView.reloadData() 
        } 
       }catch let error as NSError{ 
        print(error) 
       } 
      } 
     }).resume() 

现在,在列表(这是一个字典数组)中,我拥有所有感兴趣的数据。但是如果我想挑选一个单一的值,或者打印列表的全部内容我该怎么做?

编辑:另外,我可以简化结构,不使用数组字典 ,但更简单的东西?

+0

更多信息。如果您在一个示例中记下要解析的JSON以及您想要处理的JSON,我们可以将您推荐给解决方案。 –

+1

但对于单元格很容易,它就像self.list [indexPath.row] [“yourKey”] – Retterdesdialogs

+0

请看看SwiftyJSON。 https://github.com/SwiftyJSON/SwiftyJSON它将简化这种类型的任务。 – dmorrow

回答

1

或者你可以使用归档

import Foundation 

class UserDataManager { 

var documentsURL: NSURL? 
var fileURL:NSURL? 

func setFileURL(file: String) { 
    documentsURL = FileManager.default.urls(for: .documentDirectory, 
                in: .userDomainMask)[0] as NSURL? 
    fileURL = documentsURL!.appendingPathComponent(file) as NSURL? 

} 

func write(file: String, mDict: NSDictionary) { 
    setFileURL(file: file) 
    let data : NSData = NSKeyedArchiver.archivedData(withRootObject: mDict) as NSData 
    if let fileAssigend = fileURL { 
     data.write(to: fileAssigend as URL, atomically: true) 
    } 
} 

func read(file: String) -> NSDictionary { 
    setFileURL(file: file) 

    var data:NSData? 
    if let url = fileURL { 
     data = NSData(contentsOf: url as URL) 
     if let result = data { 
      return NSKeyedUnarchiver.unarchiveObject(with: result as Data) as! NSDictionary 
     } 
    } 

    let dict = NSDictionary() 

    return dict 
} 
} 

写使用它:

 let userDataManager = UserDataManager() 
     userDataManager.write(file: "userDataDict", mDict: responseObject) 

读:需要

 let userDataManager = UserDataManager() 
     let userDataDict = userDataManager.read(file: "userDataDict")