首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Alamofire 5解析数组

如何用Alamofire 5解析数组
EN

Stack Overflow用户
提问于 2022-08-23 18:10:37
回答 3查看 147关注 0票数 -1

我需要帮助用Alamofire 5解码json数据。我对这个数组感到困惑,我无法解码.

代码语言:javascript
复制
[
    {
        "Date": "2022-08-08T00:00:00",
        "Day": "Fri",
        "AbsenceCount": 0,
        "AbsenceRequestComments": "Request permitted",
        "Color": "No",
        "IsRequestPermitted": true
    },
    {
        "Date": "2022-09-09T00:00:00",
        "Day": "Sat",
        "AbsenceCount": 0,
        "AbsenceRequestComments": "Request permitted",
        "Color": "No",
        "IsRequestPermitted": true
    },
    {
        "Date": "2022-12-15T00:00:00",
        "Day": "Sun",
        "AbsenceCount": 0,
        "AbsenceRequestComments": "Request permitted",
        "Color": "No",
        "IsRequestPermitted": true
    }
]

我正在尝试从这个堆叠溢出,没有发现什么对我的案件有帮助。此外,我还尝试了responseString,responseData,responseJSON和最终responseDecodableOf的可编码模型。

代码语言:javascript
复制
let request = AF.request(requestURL, method: .get, parameters: parameters, encoding: URLEncoding.default, headers: returnHeader())
    .validate()
    .responseDecodable(of: [CoverCheckForDay].self) { response in
        switch response.result {
        case .success:
            guard let value = response.value else { failure(""); return }
            success(value)
        case .failure(let error):
            failure(error.localizedDescription)
        }
    }

我的模型

代码语言:javascript
复制
struct CoverCheckForDay: Codable {
    let date: String
    let day: String
    let absenceCount: Int
    let absenceRequestComments: String
    let color: String
    let isRequestPermitted: Bool

    enum CodingKeys: String, CodingKey {
        case date = "Date"
        case day = "Day"
        case absenceCount = "AbsenceCount"
        case absenceRequestComments = "AbsenceRequestComments"
        case color = "Color"
        case isRequestPermitted = "IsRequestPermitted"
    }
}

我得到了无效类型的错误,在responseString的情况下,我也有一些字符串:"\“。仅此而已,我会非常感谢你的帮助,谢谢!

编辑:来自阿拉莫火的错误

代码语言:javascript
复制
▿ Optional<AFError>
  ▿ some : AFError
    ▿ responseSerializationFailed : 1 element
      ▿ reason : ResponseSerializationFailureReason
        ▿ decodingFailed : 1 element
          ▿ error : DecodingError
            ▿ typeMismatch : 2 elements
              - .0 : Swift.Array<Any>
              ▿ .1 : Context
                - codingPath : 0 elements
                - debugDescription : "Expected to decode Array<Any> but found a string/data instead."
                - underlyingError : nil

我的参数:

代码语言:javascript
复制
▿ 3 elements
  ▿ 0 : 2 elements
    - key : "employeeId"
    - value : 13558
  ▿ 1 : 2 elements
    - key : "dates"
    ▿ value : 3 elements
      ▿ 0 : CoverRequestArray
        ▿ date : Optional<String>
          - some : "01/09/2022"
        ▿ day : Optional<String>
          - some : "Thu"
      ▿ 1 : CoverRequestArray
        ▿ date : Optional<String>
          - some : "02/09/2022"
        ▿ day : Optional<String>
          - some : "Fri"
      ▿ 2 : CoverRequestArray
        ▿ date : Optional<String>
          - some : "03/09/2022"
        ▿ day : Optional<String>
          - some : "Sat"
  ▿ 2 : 2 elements
    - key : "siteId"
    - value : 440
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-08-25 10:32:28

所以男生的问题是在服务器端,我想是错误的方法。来自side 的后端开发人员确实获得了带有输入数据体的方法。网站称,从2019年起,苹果就违反了用GET发送身体数据的行为。

谢谢大家的回答,所以偶尔是我的失败,我没有先检查一下。

邮递员屏幕:

票数 -2
EN

Stack Overflow用户

发布于 2022-08-23 18:38:33

你为什么不试试像这样解码:

在您的文件中,但在您的结构之外添加:

代码语言:javascript
复制
typealias CoverCheck = [CoverCheckForDay]

并解码如下:

代码语言:javascript
复制
AF.request(requestURL, method: .get)
        .response{ response in
            switch response.result {
            case .success(let data):
                let newJSONDecoder = JSONDecoder()
                if let result = try? newJSONDecoder.decode(CoverCheck.self, from: data!){
                   print(result)
                }
            case .failure(let error):
                print(error)
            }
        }
票数 0
EN

Stack Overflow用户

发布于 2022-08-23 19:19:57

您的输出是一个空字符串,您的自定义奇数失败值。

问题是success案件的处理是错误的。

.success有一个非可选的关联值,如.failure,它是已解码的对象。

将代码更改为以下内容

代码语言:javascript
复制
.responseDecodable(of: [CoverCheckForDay].self) { response in
    switch response.result {
    case .success(let coverCheckArray):
        success(coverCheckArray)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73463324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档