当前位置: 首页 > 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.lryc.cn/news/576221.html

相关文章:

  • matplotlib 绘制热力图
  • 基于JavaWeb的校园失物招领系统设计与实现
  • 【图像处理入门】12. 综合项目与进阶:超分辨率、医学分割与工业检测
  • SQL学习笔记4
  • 华为云Flexus+DeepSeek征文|高可用部署 Dify 平台构建 Flux 绘画中台 Chatflow 的设计与实现
  • SYSCFG 时钟在 GD32F4 系列微控制器中的作用
  • 【策划所需编程知识】
  • 每日算法刷题Day39 6.26:leetcode前缀和2道题,用时1h20min
  • python基于Django+mysql实现的图书管理系统【完整源码+数据库】
  • Unity性能优化-渲染模块(1)-CPU侧(1)-优化方向
  • Spring Boot整合Redis指南
  • C++ 快速回顾(三)
  • PICkit3编程器MCLR引脚全解析
  • vue-27(实践练习:将现有组件重构为使用组合式 API)
  • <script setup> 语法糖
  • Netty入门案例:简单Echo服务器(同步)
  • 预训练语言模型
  • 关于USB模式的一些内容(附USB接口颜色释义图)
  • Veo 3 视频生成大模型完整操作教程(2025)
  • Ai大模型 - ocr图像识别形成结构化数据(pp-ocr+nlp结合) 以及训练微调实现方案(初稿)
  • 82、高级特性-配置加载优先级
  • debain切换 opensuse 我都安装了什么
  • 【数据挖掘】数据采集和预处理
  • Milvus报错,reson=timestamp lag too large
  • [Python]-基础篇1- 从零开始的Python入门指南
  • C++11 <chrono> 库特性:从入门到精通
  • SpringMVC系列(四)(请求处理的十个实验(下))
  • 【请关注】制造企业机械加工数据脱敏解决方案
  • 【数据分析,相关性分析】Matlab代码#数学建模#创新算法
  • 目标跟踪存在问题以及解决方案