【问题标题】:typeMismatch(Swift.Dictionary<Swift.String, Any>,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 中,看看它构建了什么结构,看看您是否会帮助找到错误的地方。

标签: ios swift struct


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多