首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在4中使用JSONDecoder

在4中使用JSONDecoder
EN

Stack Overflow用户
提问于 2019-12-07 13:49:06
回答 2查看 1.9K关注 0票数 1

我使用的是快速4 xcode 9.2,我在使用JSONDecoder时得到了下面的错误。

typeMismatch(Swift.Array,Swift.DecodingError.Context(codingPath:[],debugDescription:“期望解码数组,但找到了字典”,underlyingError: 0)

代码语言:javascript
复制
class Hits: Codable { 
    let hits: [Hit] 

    init(hits: [Hit]) { 
       self.hits = hits 
    } 
}

class 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
    }
}

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 is wrong"); return } 
       print("download completed") 
       do { 
          let decoder = JSONDecoder() 
          let foods = try decoder.decode([Hits].self, from: data)  
          print(foods) 
       } catch { 
          print(error) 
       } 
   }.resume()
}

下面是JSON:https://api.edamam.com/search?q=chicken&app_id=110d8671&app_key=3f01522208d512f592625dfcd163ff5c&from=0&to=10

EN

回答 2

Stack Overflow用户

发布于 2019-12-07 15:17:59

错误清除表明您正在尝试解码数组,但实际类型是字典(单个对象)。

替换

代码语言:javascript
复制
let foods = try decoder.decode([Hits].self, from: data)

使用

代码语言:javascript
复制
let foods = try decoder.decode(Hits.self, from: data)

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

代码语言:javascript
复制
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
}
票数 2
EN

Stack Overflow用户

发布于 2019-12-07 14:07:13

代码语言:javascript
复制
hits = try decoder.decode(Hits.self from: data)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59226649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档