typeMismatch(Swift.Dictionary<Swift.String, Any>,

Posted

技术标签:

【中文标题】typeMismatch(Swift.Dictionary<Swift.String, Any>,【英文标题】: 【发布时间】:2021-03-17 15:09:55 【问题描述】:

我的 JSON :

'''

  "status": 200,
  "data": 
    "widgets": [
      
        "type": "small_half_slider",
        "data": 
          "banners": [
            
              "id": 42765,
              "image": "",
              "title": "!",
              "is_ad": false,
              "url": 
                "url": "",
                "page": "web_link",
                "params": 
                  "url": ""
                ,
                "queries": []
              ,
              "video": "",
              "description": "",
              "bullet_points": []
            
'''

和我的结构:

'''
import Foundation

struct mainPage:Codable
  var  status:Int?
  var  data: mData?


struct mData:Codable 
    var widgets:[Mwidg]


struct Mwidg:Codable

    var type:String
    var data:wdata


struct wdata:Codable
   var show_type:String?
   var banners:[bannerData]?


struct bannerData:Codable 
    var id:Int?
    var image:String?
    var title:String?
    var is_ad:Bool?
    var url:urlData?
    var video:String?
    var description:String?


struct urlData:Codable 
    var url:String?
    var page:String?
    var params:paramsData?
    var queries:[queriesData]?
  

struct paramsData:Codable 
    var url:String?


struct queriesData:Codable 

 


'''

然后我遇到了这个错误:

typeMismatch(Swift.Dictionary, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "data", intValue: nil), CodingKeys(stringValue: "widgets", intValue: nil) , _JSONKey(stringValue: "Index 1", intValue: 1), CodingKeys(stringValue: "data", intValue: nil)], debugDescription: "期望解码 Dictionary 但找到了一个数组。", 底层错误:无))

【问题讨论】:

嗯,显然数组widgetssecond 元素中的键data 的值类型是数组而不是对象。检查您的 JSON。它的价值是 ...[...] 吗? 将您的 JSON 粘贴到 quicktype.io 中,看看它构建了什么结构,看看您是否会帮助找到错误的地方。 【参考方案1】:

您正面临这个问题,因为在您的 json 响应中,您没有获取值或获取 struct mData 和 Mwidg 中存在的属性的 nil 值,为了使您的解决方案使 struct 属性成为可选的,即使您没有在您的 json 响应中接收数据,代码将起作用。您粘贴的有问题的 json 未完成,您可能将某些对象设为 nil。

【讨论】:

以上是关于typeMismatch(Swift.Dictionary<Swift.String, Any>,的主要内容,如果未能解决你的问题,请参考以下文章