如何使用路径中文件中的数组序列化 JSON 的数组?

How can I serialize Array of JSON with arrays from a file in path?

我使用 Swift 在我的 Xcode 项目中创建了一个 .json 文件。 我需要加载内容并解析以在我的控制器中使用,但是当我尝试将文件内容序列化为 json 对象时,我遇到了解析错误...

我读过另一个类似的问题,但我还没有找到一个类似的 JSON 数组来读取包含不同的结构和另一个 JSON 数组到对象中。

数组JSON的格式为:

[
  {
    "title": "The App",
    "description": "This is the description",
    "friends": [
      {
        "name": "Gary",
        "image": "http://",
        "description": "Nice"
      },
      {
        "name": "Patri",
        "image": "http://",
        "description": "Amazing"
      },
      {
        "name": "Lucy",
        "image": "http://",
        "description": "Up"
      }
    ]
  }
]

我正在使用这段代码从包路径中获取文件的内容(data.json 添加到我的项目中)然后序列化,但总是会出错,因为 Friends 包含一个数组 json.

let path = Bundle.main.path(forResource: "data", ofType: "json")
let jsonData = try! Data(contentsOf: URL(fileURLWithPath: path!))
let jsonResult = try! JSONSerialization.jsonObject(with: jsonData, options: []) as? [[String:Any]] //Here is the error parsing the array of Friend of JSON

如何解析包含另一个 json 对象数组的 json 数组?

您需要使用Codable

// MARK: - Element
struct Root: Codable {
    let title, purpleDescription: String
    let friends: [Friend]

    enum CodingKeys: String, CodingKey {
        case title
        case purpleDescription = "description"
        case friends
    }
}

// MARK: - Friend
struct Friend: Codable {
    let name, image, friendDescription: String

    enum CodingKeys: String, CodingKey {
        case name, image
        case friendDescription = "description"
    }
}

let url = Bundle.main.url(forResource: "data", withExtension: "json")
let jsonData = try! Data(contentsOf:url)
let res = try! JSONDecoder().decode([Root].self,from:data)
print(res)