在Swift 4中使用新的JSONDecoder协议时,由于格式不正确,因此无法读取数据。'错误

时间:2017-11-17 09:52:28

标签: ios json macos swift4

有点新的快速并且没有使用swift 4找到解决此错误的方法。

使用JSONDecoder功能时,我收到的错误是“由于格式不正确而无法读取数据”。'我通过验证器运行了我的JSON,并说它一切正常,所以我只是不明白为什么会发生这种错误

我的解码代码如下:

import UIKit

class inputscreen: UIViewController {
// the JSONData.php is where the data is being converted into JSON using PhP
    final let url = URL(string: "JSONData.php")

    override func viewDidLoad() {
        super.viewDidLoad()
        downloadJson()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
func downloadJson() {
    guard let downloadURL = url else {return }
    URLSession.shared.dataTask(with: downloadURL) {data, urlResponse, error in

            guard let data = data, error == nil, urlResponse != nil else {
               print("something went wrong")
               return

            }
           // print(data)
            print("downloaded")
            do {
                // this is where the error is happening, everything else is getting through my checks.
                let decoder = JSONDecoder()
                let variables = try decoder.decode(Variables.self, from:data)
                print(variables.variables[0].TblStaffID)
                print("success")

            } catch {
               print(error.localizedDescription)

          }
        }.resume()
    }
}

在JSON中我已将其转换为UTF8,因此我不会认为错误来自哪里

我在不同的文件中有这个结构,如下所示:

    import Foundation
    import UIKit

class Variables: Codable{

let variables: [Variable]
init(variables: [Variable]){
    self.variables = variables
}

}

struct Variable: Codable {
    let TblStaffID: Int
    let User_code: String
    let Title: String
    let PreName: String
    let Surname: String
  init(TblStaffID: Int, User_code: String, Title: String, PreName: String, Surname: String){

        self.TblStaffID = TblStaffID
        self.User_code = User_code
        self.Title =  Title
        self.PreName = PreName
        self.Surname = Surname
    }
}

对此事的任何和所有帮助都将不胜感激!

1 个答案:

答案 0 :(得分:1)

确保将日期格式转换为TimeIntervals或String