swift - 如何使用 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";
}
)
我怎样才能得到属性颜色?
谢谢
解决方案
创建一个确认可解码协议的类;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)
推荐阅读
- javascript - 如何重新提交 HTML 表单
- javascript - OpenLayers 未加载 GeoJSON 图层数据
- php - 产品值未使用 php ajax 发送到 addProduct 页面
- c# - Chrome浏览器在使用Selenium Webdriver c#Nunit指定要下载的文件期间运行两次
- html - 在 IE 中按下选项卡时如何在文本框(UI)中显示全部内容
- apache-spark - 自定义文件格式以在写入时对数据进行分区
- kubernetes - kube-scheduler Liveness probe failed: Get http://127.0.0.1:10251/healthz: dial tcp 127.0.0.1:10251: connect: connection denied
- saml-2.0 - 任何人都可以提供实施 SAML 的分步流程吗
- android - 如何在我的 react-native 应用程序中接收启动完成的广播?
- javascript - 对于特定模型,我如何始终在编辑模式下打开表单