在 Swift 4 中使用新的 JSONDecoder 协议时,我得到“无法读取数据,因为它的格式不正确。”错误

Posted

技术标签:

【中文标题】在 Swift 4 中使用新的 JSONDecoder 协议时,我得到“无法读取数据,因为它的格式不正确。”错误【英文标题】:When using the new JSONDecoder protocol in Swift 4 i'm getting the 'the data couldn’t be read because it isn’t in the correct format.' error 【发布时间】:2017-11-17 09:52:28 【问题描述】:

对 swift 有点陌生,还没有看到使用 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
    

我们将不胜感激!

【问题讨论】:

...它的格式不正确意思是它所说的。字符串的开头或结尾可能有一些不需要的空格,验证器不会考虑这些空格。将接收到的 JSON 视为十六进制字节。 - 并且请遵守属性和函数名称以小写字母开头的命名约定。 JSON 开头和结尾的方括号会打乱格式吗? 【参考方案1】:

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

【讨论】:

以上是关于在 Swift 4 中使用新的 JSONDecoder 协议时,我得到“无法读取数据,因为它的格式不正确。”错误的主要内容,如果未能解决你的问题,请参考以下文章

使用Swift 4.1向Heroku部署Vapor 3 beta应用程序的问题

使用 4.0 版的 Swift 3.0 项目中的 Tesseract 训练数据不工作

谷歌登录后使用 Swift 4 推送视图控制器

使用 Swift 4 和 Xcode 9 获取 JSON 数据

如何使用 swift 4.0 语言删除文件内容

Vapor 3 Swift 4 如何制作计时器