JSON序列化到SwiftyJSON

Posted

技术标签:

【中文标题】JSON序列化到SwiftyJSON【英文标题】:JSONSerialization to SwiftyJSON 【发布时间】:2018-10-08 16:23:00 【问题描述】:

我正在尝试将 SwiftyJSON 与我的 JSON api 数据一起使用,但无法理解转换的工作原理。

这里是 SwiftyJSON Git 的链接:https://github.com/SwiftyJSON/SwiftyJSON

这是我当前的代码:

func newFilms() 

        let apiKey = "12345"
        let url = URL(string: "https://api.themoviedb.org/3/movie/now_playing?api_key=\(apiKey)&language=en-US&page=1")
        let request = URLRequest(
            url: url! as URL,
            cachePolicy: URLRequest.CachePolicy.reloadIgnoringLocalCacheData,
            timeoutInterval: 10 )

        let session = URLSession (
            configuration: URLSessionConfiguration.default,
            delegate: nil,
            delegateQueue: OperationQueue.main
        )

        let task = session.dataTask(with: request, completionHandler:  (dataOrNil, response, error) in
            if let data = dataOrNil 
                if let resposeDictionary = try! JSONSerialization.jsonObject(with: data, options:[]) as? [String: Any] 

                    self.films = (resposeDictionary["results"] as? [String: Any])!
                    print("response: \(resposeDictionary)")
                

            

            self.filteredFilms = self.films
            self.filmsCollection.reloadData()

        )


        task.resume()

    

这是新的 SwiftyJSON 的示例:

let json = JSON(data: dataFromNetworking)
if let userName = json[0]["user"]["name"].string 
print("\(userName)")
//Now you got your value

我的主要问题是,data: datafromNetworking 上写着什么,我很困惑应该实现原始代码的哪一部分以及如何将其用于新版本。

【问题讨论】:

【参考方案1】:

dataFromNetworking 表示从 dataTask 返回的data 对象。 SwiftyJSON 进行反序列化。

替换

if let data = dataOrNil 
    if let resposeDictionary = try! JSONSerialization.jsonObject(with: data, options:[]) as? [String: Any] 

        self.films = (resposeDictionary["results"] as? [String: Any])!
        print("response: \(resposeDictionary)")
    

if let data = dataOrNil 
    do 
        let json = try JSON(data: data)
        self.films = json["results"].dictionaryValue
     catch  print(error) 

但是在 Swift 4 中,SwiftyJSON 已经过时,取而代之的是强大的内置 Codable 协议

【讨论】:

有从序列化到可编码转换的链接或示例吗? 请search。具体的解决方案取决于具体的 JSON 结构。 好的,我已经很好地解码了数据。现在的问题是找到用于使用数据的正确代码。例如在单元格中显示数据或使用 .count。没有太多运气在这方面找到许多 JSON 编码数据的资源。

以上是关于JSON序列化到SwiftyJSON的主要内容,如果未能解决你的问题,请参考以下文章

SwiftyJSON 对象的 JSON 序列化失败

使用 SwiftyJSON 将 JSON 数组反序列化为 Swift 对象

使用 SwiftyJSON 反序列化时如何添加对象数组

SwiftyJSON 添加 JSON 对象数组

Swift 2:将 JSON 原生序列化为核心数据模型对象

SwiftyJSON.JSON 到 [String: AnyObject]