Codable解析JSON

news/2024/9/25 8:27:46

当然可以!下面我会详细讲解如何在 Swift 中解析 JSON 文件,使用 Codable 协议的方法。

示例:解析一个简单的 JSON 文件

假设我们有一个名为 example.json 的 JSON 文件,内容如下:

{"name": "John Doe","age": 30
}

第一步:定义数据模型

首先,我们需要定义一个与 JSON 数据结构相对应的 Swift 结构体,并遵循 Codable 协议。

import Foundationstruct Person: Codable {var name: Stringvar age: Int
}

解释

  • struct Person:定义了一个名为 Person 的结构体。
  • Codable:这是一个协议,使结构体可以被编码和解码。
  • var name: Stringvar age: Int:这些属性与 JSON 中的键对应。

第二步:将 JSON 文件添加到项目中

  1. 在 Xcode 中,右键点击项目导航中的文件夹,选择 “New File”。
  2. 选择 “Empty File” 并命名为 example.json,然后添加上面的 JSON 内容。

第三步:解析 JSON 文件

接下来,我们将编写代码来读取 JSON 文件并解析它。

import Foundationfunc 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 类型的对象。
  • 最后打印 nameage 属性。

运行代码

确保你的项目中有 example.json 文件,然后运行代码。你应该会在控制台看到输出:

Name: John Doe, Age: 30

其他情况

如果 JSON 结构更复杂,例如包含一个数组:

{"people": [{"name": "John Doe","age": 30},{"name": "Jane Smith","age": 25}]
}

你需要相应地调整数据模型:

struct Person: Codable {var name: Stringvar 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)")
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/64455.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

广州C++信奥老师解一本通题 1346:【例4-7】亲戚(relation)

​ 【题目描述】或许你并不知道,你的某个朋友是你的亲戚。他可能是你的曾祖父的外公的女婿的外甥女的表姐的孙子。如果能得到完整的家谱,判断两个人是否是亲戚应该是可行的,但如果两个人的最近公共祖先与他们相隔好几代,使得家谱十分庞大,那么检验亲戚关系实非人力所能及。…

智源大会-2024-十一-

智源大会 2024(十一) 2024北京智源大会-视觉大模型 - P6:圆桌论坛:视觉重回第一赛道?-主持人:颜水成-嘉宾:鲍 凡-申琛惠-李俊男-程明明 - 智源社区 - BV13x4y1t7sb 今天的话虽然是我们是这个视觉的,这个呃大模型,但是我们也有这个AMP,也有多模态的那个俊男在这个地方…

智源大会-2024-十-

智源大会 2024(十) 2024北京智源大会-生成模型 - P4:视觉生成中的若干问题;古纾旸 - 智源社区 - BV1DS411w7hz 这个怎么控,好可以好,行那就这样吧,嗯好,大家好,我是谷舜阳,今天这个标题的title写的有点大,我一直在想我要不要起这个title,最后还是起了这个title,主…

智源大会-2024-二-

智源大会 2024(二) 2024北京智源大会-人工智能+数据新基建 - P2:大模型需要大数据流转模式创新-黄铁军 - 智源社区 - BV1qx4y14735 尊敬的上部长夏局长啊,各位领导啊,各位专家呃,特别感谢啊,大家来这个出席今天这个志愿大会,我们嗯围绕人工智能,特别是数据呃的一一些这…

智源大会-2024-九-

智源大会 2024(九) 2024北京智源大会-智能驾驶 - P4:比亚迪智驾与智舱开发工作实践:高 文 - 智源社区 - BV1Ww4m1a7gr 呃首先感谢刘主任的介绍以及组委会的邀请,呃很高兴与大家相聚在致远,呃,刚才首先黄教授先讲了这个人类对于呃,驾驶任务的这个完成,刚才也说了,人类…

P12-AI-in-Healthcare---爱可可-爱生活---BV1jo4y1d7R6

P12:AI in Healthcare - 爱可可-爱生活 - BV1jo4y1d7R6 我在谷歌工作了16年,过去六年,我一直在生命科学和医疗保健,我通常喜欢运行更多的互动课程,嗯,给定群体的规模,我们认为民意调查可能会奏效,所以我会在整个谈话过程中发起几个民意调查。 我也会试着留意聊天记录,…

P10-Taming-Dataset-Bias-via-Domain-Adaptation---爱可可-爱生活---BV1jo4y1d7R6

P10:Taming Dataset Bias via Domain Adaptation - 爱可可-爱生活 - BV1jo4y1d7R6 我很高兴今天在这里,和你们谈谈我非常兴奋和感兴趣的事情,因为这是我的研究领域,所以总是很有趣,讲一个关于自己的研究的话题,所以我的话题是驯服数据集,通过领域适应性um和我相信。 您已…

P9-Deep-CPCFG-for-Information-Extraction---爱可可-爱生活---BV1jo4y1d7R6

P9:Deep CPCFG for Information Extraction - 爱可可-爱生活 - BV1jo4y1d7R6 谢谢,所以我在全球eui带领呃,今天,我们将与您讨论我们已经完成的一些工作,信息提取专门针对深层cpcfg,因此希望如此,我们将介绍一些您可能以前从未遇到过的概念,在我们开始之前,可能会免除一…