首页 > 解决方案 > 如何使用 URLSession 从 HTTP 请求的 JSON 对象中获取特定属性

问题描述

使用以下代码,我能够有效地获取 JSON 对象,但我不确定如何从对象中检索特定属性。

SWIFT代码

@IBAction func testing(_ sender: Any) {
    let url = URL(string: "http://example.com/cars/mustang")

    let task = URLSession.shared.dataTask(with: url!) { data, response, error in
        guard error == nil else {
            print(error!)
            return
        }
        guard let data = data else {
            print("Data is empty")
            return
        }
        let json = try! JSONSerialization.jsonObject(with: data, options: [])
        print(json)
    }
    task.resume()
}

这是我在运行上述代码时看到的...

输出 - JSON 对象

(
    {
    color = "red";
    engine = "5.0";
    }
)

我怎样才能得到属性颜色?

谢谢

标签: swiftnsurlsession

解决方案


创建一个确认可解码协议的类;CarInfo 例如在您的情况下

class CarInfo: Decodable

创建类的属性

var color: String

var engine: String

创建继承自 CodingKey 的 JSON 密钥枚举

enum CarInfoCodingKey: String, CodingKey {
   case color 
   case engine 
}

实现初始化

required init(from decoder: Decoder) throws

课程将是

class CarInfo: Decodable {
var color: String
var engine: String
enum CarInfoCodingKey: String, CodingKey {
case color
case engine
}
public init(from decoder: Decodabler) throws {
let container = try decoder.container(keyedBy: CarInfoCodingKey.self)
self.color = try container.decode(String.self, forKey: .color)
self.engine = try contaire.decode(String.self, forKey: .engine)
}
}

呼叫解码器

let carinfo = try JsonDecoder().decode(CarInfo.self, from: jsonData)

推荐阅读