当前位置: 首页 > news >正文

swift 对象转Json

在 Swift 中将对象转换为 JSON 可以通过以下方法实现:

使用 Codable 协议

Swift 的 Codable 协议(EncodableDecodable 的组合)是处理 JSON 编码和解码的推荐方式。

struct Person: Codable {var name: Stringvar age: Int
}let person = Person(name: "John", age: 30)
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinteddo {let jsonData = try encoder.encode(person)if let jsonString = String(data: jsonData, encoding: .utf8) {print(jsonString)}
} catch {print("Error encoding to JSON: \(error)")
}

使用 JSONSerialization

如果对象是字典或数组,可以直接使用 JSONSerialization

let dictionary: [String: Any] = ["name": "John", "age": 30]
if JSONSerialization.isValidJSONObject(dictionary) {do {let jsonData = try JSONSerialization.data(withJSONObject: dictionary, options: .prettyPrinted)if let jsonString = String(data: jsonData, encoding: .utf8) {print(jsonString)}} catch {print("Error converting to JSON: \(error)")}
}

处理自定义编码逻辑

对于需要自定义编码逻辑的对象,可以手动实现 Encodableencode(to:) 方法:

struct CustomPerson: Encodable {var name: Stringvar age: Intenum CodingKeys: String, CodingKey {case name = "user_name"case age}func encode(to encoder: Encoder) throws {var container = encoder.container(keyedBy: CodingKeys.self)try container.encode(name, forKey: .name)try container.encode(age, forKey: .age)}
}

注意事项

  • 确保所有属性都符合 Codable 协议,否则需要手动实现编码逻辑。
  • 使用 JSONEncoder 时,可以通过 outputFormatting 调整输出格式(如 .prettyPrinted)。
  • 如果对象包含非 Codable 类型(如 UIImage),需要先转换为支持的类型(如 DataString)。
http://www.lqws.cn/news/548299.html

相关文章:

  • 分布式系统ID生成方案深度解析:雪花算法 vs UUID vs 其他主流方案
  • Hyperledger Fabric 入门笔记(二十)Fabric V2.5 测试网络进阶之Tape性能测试
  • Ubuntu 20.04 系统上运行 SLAM卡顿是什么原因
  • 免安装一键修复网络诊断 + 权限修复!打印机共享错误工具适配 Win7/10/11
  • Spring Boot 项目实训 - 图书信息网站
  • 移动端测试——如何解决iOS端无法打开弹窗式网页(Webkit)
  • canvas面试题200道
  • C++:string类(1)
  • 临床项目计划框架
  • java代码规范
  • 机器学习2——贝叶斯理论下
  • 【Linux手册】进程终止:进程退出和信号的响应机制
  • 微软全新开源的Agentic Web网络项目:NLWeb详解
  • 【C/C++】单元测试实战:Stub与Mock框架解析
  • 【世纪龙科技】吉利博瑞汽车车身诊断与校正仿真教学软件
  • window显示驱动开发—DirectX 图形内核子系统(二)
  • Ai大模型 - ocr图像识别形成结构化数据(pp-ocr+nlp结合) 以及训练微调实现方案(初稿)
  • 第六章 总线
  • 四大高频设计题深度解析:【LRU缓存】、【LFU缓存】、最大频率栈、餐盘栈
  • 论面向服务的架构设计
  • Java项目:基于SSM框架实现的宠物综合服务平台管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
  • MySQL在C中常用的API接口
  • 楼宇自控系统以智能化管控,全方位满足建筑节约、安全与可靠运行需求
  • 嵌入式项目:基于QT与Hi3861的物联网智能大棚集成控制系统
  • 模型部署和推理架构学习笔记
  • <script setup> 语法糖
  • 中高端服装品牌开展全渠道零售业务,如何选OMS订单管理系统?|商派
  • 成都芯谷金融中心·文化科技产业园:绘就区域腾飞新篇章
  • 【Pandas】pandas DataFrame resample
  • 疲劳检测与行为分析:工厂智能化实践