Swift中将对象数组转为JSON字符串用于API调用时报错如何解决
错误产生原因
你使用的JSONSerialization仅支持序列化Foundation内置桥接类型(包括NSString、NSNumber、NSArray、NSDictionary等),自定义的Swift NotificationModel结构体不属于它支持的类型范围,传入后会触发运行时异常。之前[String]类型数组可以正常转换是因为Swift字符串可自动桥接为NSString,符合JSONSerialization的参数要求。
正确实现方式
你已经为NotificationModel声明了Codable协议,直接使用Swift原生的JSONEncoder做序列化即可,这是处理Codable类型的官方标准方案,适配所有符合Encodable协议的类型:
let data = ["123","1234"] let data2 = [NotificationModel(version: "2", bigPicture: "data"), NotificationModel(version: "3", bigPicture: "data")] struct NotificationModel: Codable { var version : String? var bigPicture : String? } // 通用Codable类型转JSON字符串方法,兼容所有Encodable类型 func json<T: Encodable>(from object: T) -> String? { let encoder = JSONEncoder() // 如果需要格式化输出可开启下面的配置 // encoder.outputFormatting = .prettyPrinted guard let data = try? encoder.encode(object) else { return nil } return String(data: data, encoding: .utf8) } print("\(json(from:data2) ?? "转换失败")") print("\(json(from: data) ?? "转换失败")")
执行后输出的结果为标准JSON格式:[{"version":"2","bigPicture":"data"},{"version":"3","bigPicture":"data"}],直接满足接口调用要求。
内容的提问来源于stack exchange,提问作者BIS Tech
相关产品推荐
相关产品推荐

