用 API 结果填充模型
Populate model with API result
我希望使用端点的“有效负载”部分填充我的模型。我创建了一个 DataResponse 模型,它有一个记录 属性 的 Payload。我只想从 API 端点的有效负载部分获取数据。我的网络调用不正确,我的模型结构一定是错误的,但我不确定需要修复什么。我不确定它是否有所作为,但我的端点显示为 XML,我将其转换为下面的 JSON。
struct DataResponse: Decodable {
let record: Payload
}
struct Payload: Decodable {
let SoldToday: Int
}
let url = URL(string: "https:------")!
URLSession.shared.dataTask(with: url) {data, response, error in
guard error == nil,
let data = data else {
print(error)
return
}
let dataResponse = try? JSONDecoder().decode(DataResponse.self, from: data)
if let dataResponse = dataResponse {
print(dataResponse.record.SoldToday)
}
}.resume()
这些是我的 url 端点的内容:
{
"action": "API_DoQuery",
"errcode": "0",
"errtext": "No error",
"dbinfo": {
"name": "Daily",
"desc": []
},
"variables": {
"__iol": "&rand='+new Date().getTime())};\">",
"__script": "&rand='+new Date().getTime());void(0);",
"iol": "<img qbu='module' src='/i/clear2x2.gif' onload=\"javascript:if(typeof QBU=='undefined'){QBU={};$.getScript(gReqAppDBID+'?a=dbpage&pagename=",
"script": "javascript:$.getScript(gReqAppDBID+'?a=dbpage&pagename="
},
"chdbids": [],
"record": {
"payload": "{ \"RecordID\": 04-22-2022, \"SoldToday\": 18, \"ContractToday\": 869327, \"KWToday\": 160960 }",
"update_id": "1647544685640"
}
}
您需要解决 2 个问题才能解码您的 json 数据:
您需要与您的 json 数据匹配的模型。如:
struct DataResponse: Decodable {
let record: Record
}
struct Record: Decodable {
let payload: Payload
}
struct Payload: Decodable {
let SoldToday: Int
}
并且您需要确保您的数据有效 json。当前 variables
无效,对于 record
中的 payload
也是如此,
(它用引号引起来)。修复这些问题后,我就能够在测试中成功解码数据。
请注意,如果您的端点为您提供 XML,那么最好将 XML 直接转换为您的模型,而不必转换为 json。 github.
上有许多 XML 个解析器库
我希望使用端点的“有效负载”部分填充我的模型。我创建了一个 DataResponse 模型,它有一个记录 属性 的 Payload。我只想从 API 端点的有效负载部分获取数据。我的网络调用不正确,我的模型结构一定是错误的,但我不确定需要修复什么。我不确定它是否有所作为,但我的端点显示为 XML,我将其转换为下面的 JSON。
struct DataResponse: Decodable {
let record: Payload
}
struct Payload: Decodable {
let SoldToday: Int
}
let url = URL(string: "https:------")!
URLSession.shared.dataTask(with: url) {data, response, error in
guard error == nil,
let data = data else {
print(error)
return
}
let dataResponse = try? JSONDecoder().decode(DataResponse.self, from: data)
if let dataResponse = dataResponse {
print(dataResponse.record.SoldToday)
}
}.resume()
这些是我的 url 端点的内容:
{
"action": "API_DoQuery",
"errcode": "0",
"errtext": "No error",
"dbinfo": {
"name": "Daily",
"desc": []
},
"variables": {
"__iol": "&rand='+new Date().getTime())};\">",
"__script": "&rand='+new Date().getTime());void(0);",
"iol": "<img qbu='module' src='/i/clear2x2.gif' onload=\"javascript:if(typeof QBU=='undefined'){QBU={};$.getScript(gReqAppDBID+'?a=dbpage&pagename=",
"script": "javascript:$.getScript(gReqAppDBID+'?a=dbpage&pagename="
},
"chdbids": [],
"record": {
"payload": "{ \"RecordID\": 04-22-2022, \"SoldToday\": 18, \"ContractToday\": 869327, \"KWToday\": 160960 }",
"update_id": "1647544685640"
}
}
您需要解决 2 个问题才能解码您的 json 数据:
您需要与您的 json 数据匹配的模型。如:
struct DataResponse: Decodable {
let record: Record
}
struct Record: Decodable {
let payload: Payload
}
struct Payload: Decodable {
let SoldToday: Int
}
并且您需要确保您的数据有效 json。当前 variables
无效,对于 record
中的 payload
也是如此,
(它用引号引起来)。修复这些问题后,我就能够在测试中成功解码数据。
请注意,如果您的端点为您提供 XML,那么最好将 XML 直接转换为您的模型,而不必转换为 json。 github.
上有许多 XML 个解析器库