Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在swift 4中使用JSONDecoder_Arrays_Json_Jsondecoder - Fatal编程技术网

Arrays 在swift 4中使用JSONDecoder

Arrays 在swift 4中使用JSONDecoder,arrays,json,jsondecoder,Arrays,Json,Jsondecoder,我使用的是swift 4 xcode 9.2,在使用JSONDecoder时出现以下错误 类型不匹配(Swift.Array,Swift.DecodingError.Context)(编码路径:[], debugDescription:“应解码数组,但找到了字典。”, 参考误差:零) 以下是JSON: 该错误将清除试图解码数组但实际类型为字典(单个对象)的状态 替换 let foods = try decoder.decode([Hits].self, from: data) 与 而您的类(实

我使用的是swift 4 xcode 9.2,在使用JSONDecoder时出现以下错误

类型不匹配(Swift.Array,Swift.DecodingError.Context)(编码路径:[], debugDescription:“应解码数组,但找到了字典。”, 参考误差:零)

以下是JSON:

该错误将清除试图解码数组但实际类型为字典(单个对象)的状态

替换

let foods = try decoder.decode([Hits].self, from: data)

而您的类(实际上结构已经足够)是


向我们展示您的代码,以便我们可以帮助您。我假设您在解码时使用了错误的类型(数组)而不是(字典)…类Hits:Codable{let Hits:[Hit]init(Hits:[Hit]){self.Hits=Hits}}类Hit:Codable{let recipe:String let uri:String let label:String let image:String let source:String let url:String let shareAs:String let yield:String init(recipe:String,uri:String,label:String,image:String,source:String,url:String,shareAs:String,yield:String){self.recipe=recipe self.uri=uri self.label=label self.image=image self.source=source self.url=url self.shareAs=shareAs self.yield=yield这里是downloadJSON()函数func downloadJSON(){guard let downloadURL=url else{return}URLSession.shared.dataTask(with:downloadURL){(data,urlResponse,error)在guard let data=data,error==nil,urlResponse!=nil else{print(“出错”)return}print(“下载完成”)do{let decoder=JSONDecoder()let foods=try decoder.decode([Hits].self,from:data)print(foods)}catch{print(错误)}}.resume()你可以编辑你的问题->在那里你可以标记你的代码,然后点击“括号”->,这样你的代码格式就会很好,我们会更好地理解它;)我需要定义hits=dict[“hits”]在swift.file中?虽然这段代码可能会回答这个问题,但提供关于这段代码为什么和/或如何回答这个问题的附加上下文可以提高其长期价值。在这之后,我得到了下面的错误。typeMismatch(swift.String,swift.DecodingError.context)(codingPath:[TestTableView.Hits。(CodingKeys在F57 C5D8E25B381A1D56B4F4F96A)中(在J.12768 CA107A31 EF2DCE034 FD75 B54 1C9中)(String值:“索引0”,InValue:可选(0)),TestTableView .HIT。(在F5C5D8E25B381A1A1D56B4F4F96A)中的代码键,Debug描述:“期望解码字符串,但是找到了字典。”,underyingError:nil))该错误表示,
recipe
的值是一个字典,可以对另一个结构进行编码。您必须声明另一个结构或类,如
Hit
我创建了另一个类似的类。类Hits:Codable{let Hits:[Hit]init(Hits:[Hits]){self Hits=Hits}该类必须命名为
Recipe
,并且必须包含与JSON键和类型匹配的属性。顺便说一句,如果采用Codable,则不需要所有初始值设定项。
hits = try decoder.decode(Hits.self from: data)
let foods = try decoder.decode([Hits].self, from: data)
let foods = try decoder.decode(Hits.self, from: data)
struct Recipe : Decodable {
    let uri : URL
    let label : String
    let image : URL
    let source : String
    let url : URL
    let shareAs : URL
    let yield : Double
    let calories, totalWeight, totalTime : Double
}

struct Hits: Decodable {
    let hits: [Hit]
}

struct Hit: Decodable {
    let recipe: Recipe
}