在 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 训练数据不工作