首页 > 其他分享 >Codable解析JSON

Codable解析JSON

时间:2024-09-25 08:55:09浏览次数:1  
标签:Codable age Person JSON var 解析 name

当然可以!下面我会详细讲解如何在 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: Stringvar age: Int:这些属性与 JSON 中的键对应。

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

  1. 在 Xcode 中,右键点击项目导航中的文件夹,选择 “New File”。
  2. 选择 “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 类型的对象。
  • 最后打印 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: 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)")
}

标签:Codable,age,Person,JSON,var,解析,name
From: https://www.cnblogs.com/Tamako-/p/18430477

相关文章