Codable解析JSON
当然可以!下面我会详细讲解如何在 Swift 中解析 JSON 文件,使用 Codable
协议的方法。
示例:解析一个简单的 JSON 文件
假设我们有一个名为 example.json
的 JSON 文件,内容如下:
{
"name": "John Doe",
"age": 30
}
第一步:定义数据模型
首先,我们需要定义一个与 JSON 数据结构相对应的 Swift 结构体,并遵循 Codable
协议。
import Foundation
struct Person: Codable {
var name: String
var age: Int
}
解释:
struct Person
:定义了一个名为Person
的结构体。Codable
:这是一个协议,使结构体可以被编码和解码。var name: String
和var age: Int
:这些属性与 JSON 中的键对应。
第二步:将 JSON 文件添加到项目中
- 在 Xcode 中,右键点击项目导航中的文件夹,选择 “New File”。
- 选择 “Empty File” 并命名为
example.json
,然后添加上面的 JSON 内容。
第三步:解析 JSON 文件
接下来,我们将编写代码来读取 JSON 文件并解析它。
import Foundation
func loadJSON() {
// 使用 Bundle 来获取 JSON 文件的路径
if let path = Bundle.main.path(forResource: "example", ofType: "json") {
do {
// 读取文件内容并转为 Data 类型
let data = try Data(contentsOf: URL(fileURLWithPath: path), options: .mappedIfSafe)
// 使用 JSONDecoder 解码 JSON 数据
let decoder = JSONDecoder()
let person = try decoder.decode(Person.self, from: data)
// 打印解析后的结果
print("Name: \(person.name), Age: \(person.age)")
} catch {
// 处理错误
print("Error parsing JSON: \(error)")
}
}
}
// 调用函数
loadJSON()
解释:
Bundle.main.path(forResource: "example", ofType: "json")
:获取 JSON 文件的路径。Data(contentsOf:)
:读取文件内容并转换为Data
类型。JSONDecoder()
:创建一个 JSON 解码器。decoder.decode(Person.self, from: data)
:将Data
解码为Person
类型的对象。- 最后打印
name
和age
属性。
运行代码
确保你的项目中有 example.json
文件,然后运行代码。你应该会在控制台看到输出:
Name: John Doe, Age: 30
其他情况
如果 JSON 结构更复杂,例如包含一个数组:
{
"people": [
{
"name": "John Doe",
"age": 30
},
{
"name": "Jane Smith",
"age": 25
}
]
}
你需要相应地调整数据模型:
struct Person: Codable {
var name: String
var age: Int
}
struct PeopleResponse: Codable {
var people: [Person]
}
然后在解析时:
let peopleResponse = try decoder.decode(PeopleResponse.self, from: data)
// 访问数组
for person in peopleResponse.people {
print("Name: \(person.name), Age: \(person.age)")
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库