SwiftUI中加载自定义JSON列表不显示 控制台仅输出Error
问题排查与修复步骤
- 首先替换模糊的错误日志,定位真实失败原因
目前代码的catch块仅打印笼统的"Error",完全丢失了解码失败的具体上下文,直接将catch块的打印逻辑替换为输出完整错误对象,重新运行即可看到触发解码失败的具体原因:} catch { print("JSON解码详细错误:\(error)") } - 核对Codable结构与接口返回JSON的字段匹配度
对照定义的Busso结构体,两类不匹配会直接触发解码失败:- 字段类型不匹配:结构体中将
id定义为UUID类型,但目标接口返回的id为纯数字格式,并非符合UUID规范的字符串,JSONDecoder默认无法将数字直接转换为UUID格式。需要将id的类型修改为和接口返回值一致的类型(如Int)。 - 字段可空性不匹配:结构体中所有属性均被定义为非可选
String类型,但接口实际返回中部分扩展字段会输出null空值,非可选属性遇到空值会直接触发解码失败。需要给这类可能为空的字段增加可选标记,修改为String?类型。
调整后的结构体参考:
struct Busso: Codable, Identifiable { public var id: Int public var titolo: String public var autore: String public var testo: String public var data: String public var extra1: String? public var extra2: String? public var foto: String public var fotoUrl: String? } - 字段类型不匹配:结构体中将
- 校验字段名映射关系
如果详细错误日志提示找不到对应键值,需核对接口返回的JSON键名与结构体属性名的大小写是否完全一致,存在差异时可通过自定义CodingKeys建立映射关系,无需调整后端的JSON输出结构。
内容的提问来源于stack exchange,提问作者pierofrezza
相关产品推荐
相关产品推荐

