请指示我可能重复,但在我的研究中,我无法找到解决方案。
这是我试图从我的REST API解码的JSON对象:
{
"name": "Oak",
"leaves":[
{
"id": "1A",
"damaged": false
},
{
"id": "2A",
"damaged": false
},
{
"id": "3E",
"damaged": false
}
]
}
以下是目前的代码:
struct Tree: Codable {
var name : String?
var leaves : [Leaf]?
init() {
self.name = string()
self.leaves = []
}
}
struct Leaf: Codable {
var id : String?
var damaged : Bool?
init(){
self.id = String()
self.damaged = Bool()
}
}
现在当我使用API时,我使用以下方法解码响应:
let jsonDecoder = JSONDecoder()
let time = try jsonDecoder.decode(Tree.self, from: data)
当我尝试解码此API时,我得到:
“无法读取数据,因为格式不正确。”
感谢您提供的任何指导,谢谢!
此外,由于它们作为单例使用,因此初始化是存在的,我不是在寻找不使用单例模式的建议,我只是想找到解码的问题。
编辑:
感谢大家的回复!我认为这个问题来自于Array的自定义Struct,但它实际上更简单,我觉得很愚蠢。看看下面的答案。
再次,感谢大家的谦卑自己的指导!
答案 0 :(得分:0)
对于任何在swift4数组中查看此问题的自定义Struct的人来说,这段代码确实可以正常工作。
当我问这个问题并不是问题时,我错过了数据中的参数。附加字段现在在下面,我的问题是我将日期声明为Int32?而不是Int64?。
{
"name": "Oak",
"discoveryDate": 1514178000000,
"leaves":[
{
"id": "1A",
"damaged": false
},
{
"id": "2A",
"damaged": false
},
{
"id": "3E",
"damaged": false
}
]
}
哪会将结构更改为:
struct Tree: Codable {
var name : String?
var discoveryDate : Int64?
var leaves : [Leaf]?
init() {
self.name = String()
self.discoveryDate = Int64()
self.leaves = []
}
}
struct Leaf: Codable {
var id : String?
var damaged : Bool?
init(){
self.id = String()
self.damaged = Bool()
}
}