Swift-希望对Array <Any>进行解码,但是找到了一个字典”,底层错误:无

问题描述

我正在尝试为我的应用程序解码一些json,通常我会这样做。

我的结构;

struct RequestTypes: Codable {
      let MerchRequestTypeID: Int?
      let TypeName: String?
      let LayoutID: Int?

   private enum CodingKeys: Int,CodingKey {
       case MerchRequestTypeID
       case TypeName
       case LayoutID
       }
}

然后解码;

func downloadRequestTypesJson(){
    guard let gitUrl = URL(string: "URL") else { return }
    URLSession.shared.dataTask(with: gitUrl) { (data,response,error) in
        guard let data = data else { return }
        do {
            let decoder = JSONDecoder()
            let RequestData = try decoder.decode(Array<RequestTypes>.self,from: data)
            dispatchQueue.main.sync {
                print(RequestData[0].MerchRequestTypeID)
                print(RequestData[1].MerchRequestTypeID)
                print(RequestData[2].MerchRequestTypeID)
            }
        } catch let err {
            print("Err",err)
        }
        }.resume()
}

这对于下面的json很好;

[
   {
     "MerchRequestTypeID": 1,"TypeName": "Stok","LayoutID": 1
   },{
     "MerchRequestTypeID": 2,"TypeName": "Stand","LayoutID": 2
   },{
     "MerchRequestTypeID": 3,"TypeName": "Eğitim","LayoutID": 2
   }
]

但是现在我需要解码此json并即时获取 期望解码Array,但是找到了字典。 错误

{
  "RequestTypes": [
   {
     "MerchRequestTypeID": 1,"TypeName": "Stock","TypeName": "Education","LayoutID": 2
   }
  ]
}

找不到正确的方法来执行此操作。任何帮助表示赞赏。

编辑: 我是Swift的初学者。我想知道如何解码第二个json以及如何到达其元素。

解决方法

那是因为您尝试使用“ RequestTypes”属性而非数组来解码JSON对象。一种解决方案是为此数据结构创建一个新结构,并使用该结构来解码JSON:

struct RequestTypesContainer: Codable {
    let RequestTypes : [RequestTypes]

    private enum CodingKeys: String,CodingKey {
       case RequestTypes
    }
}

然后:

let RequestData = try decoder.decode(RequestTypesContainer.self,from: data)