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
相关产品推荐
相关产品推荐

