You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 4 JSON解码错误:类型不匹配问题求助

解决JSON解析的TypeMismatch错误

我来帮你揪出这个typeMismatch的问题!先对着你给的JSON数据,咱们一步步拆解可能的坑:

先理清你的JSON结构层级

首先明确这个JSON的嵌套关系:

{
  "status": 200,
  "data": {
    "date": "2018-04-07T00:00:00.508Z",
    "featured": [
      {
        "id": "2345",
        "name": "name",
        "price": "1,000", // 注意这里是带逗号的字符串!
        "priceIcon": "String",
        "priceIconLink": "URLString",
        "images": {
          "icon": "URLString",
          "png": "URLString",
          "gallery": "URLString",
          "featured": "URLString"
        },
        "rarity": "1String",
        "type": "1String"
      }
    ]
  }
}

最可能踩的几个类型不匹配坑

  • 字段类型完全不对应
    最常见的就是这个price字段:JSON里是"1,000"(带千分位逗号的字符串),如果你的结构体里把它定义成int/float数字类型,直接就会报typeMismatch。另外date是ISO格式的字符串,如果你的结构体用了日期类型但没配置解析规则,也可能解析失败。
  • 嵌套结构体/数组定义错误
    比如featured是数组类型,但你的结构体里把它定义成了单个对象;或者images对应的嵌套结构体字段名、类型写错了,都会触发不匹配。
  • 字段名大小写/映射错误
    如果用的是Go、Java这类区分大小写的语言,一定要确保结构体字段的JSON标签和JSON里的键名完全一致(比如JSON里是priceIcon,不能写成PriceIcon);如果是Python,dataclass的字段名也要对应上,或者用field(alias="xxx")指定别名。

给你一个参考的结构体示例(以Go为例)

下面是完全匹配这个JSON的结构体定义,你可以对照自己的代码调整:

// 最外层响应结构体
type APIResponse struct {
    Status int    `json:"status"`
    Data   Data   `json:"data"`
}

// Data层级结构体
type Data struct {
    Date     string        `json:"date"`
    Featured []FeaturedItem `json:"featured"` // 注意是切片(数组)类型
}

// Featured数组里的单个元素结构体
type FeaturedItem struct {
    ID           string `json:"id"`
    Name         string `json:"name"`
    Price        string `json:"price"` // 这里用字符串匹配JSON里的"1,000"
    PriceIcon    string `json:"priceIcon"`
    PriceIconLink string `json:"priceIconLink"`
    Images       Images `json:"images"`
    Rarity       string `json:"rarity"`
    Type         string `json:"type"`
    // 如果还有其他字段,继续补充对应类型
}

// Images嵌套结构体
type Images struct {
    Icon     string `json:"icon"`
    Png      string `json:"png"`
    Gallery  string `json:"gallery"`
    Featured string `json:"featured"`
}

排查小技巧

  • 分层测试解析:先只解析最外层的status和data,确认没问题后再逐步深入到featured数组和内部对象,定位到底是哪个字段出问题。
  • 打印JSON原始数据:解析前先把返回的JSON完整打印出来,确认和你预期的结构完全一致(比如有没有某个字段突然变成了null或者数组)。
  • 日期字段特殊处理:如果date字段要转成日期类型,一定要给解析器指定格式,比如Go里可以加time_format:"2006-01-02T15:04:05.000Z"标签,Python里用datetime.fromisoformat()处理。

内容的提问来源于stack exchange,提问作者Nxt97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:30:00