用 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 个解析器库