如何使用循环从jsonresult获取元素(Swift 3)


let jsonResult = try JSONSerialization.jsonObject(with: jsonData!, options: .mutableContainers) as! NSDictionary

当调试器上方时,在调试控制台中有 ->

jsonResult =(NSDictionary) 2 key/value pairs
>[0] = “CompanyList” : 140 elements
>[1] = “StatusTable” : 1 element

jsonresult包含2个数组

现在我想使用循环浏览公司列表喜欢

let arr_CompanyList = [CompanyList]()
for dictionary in json as! [[CompanyList]]
{
  //arr_CompanyList.append(dictionary)            
}

但给出错误

这是公司列表类

public class CompanyList {
    public var companyAlt_Key : Int?
    public var company_Name : String?
    public var tableName : String?
}

我应该如何做?

您无法将JSON数组响应转换为直接的类对象数组,需要从JSON响应中创建自定义类对象。另外,而不是在swift中使用 NSDictionary使用本机类型 Dictionary

if let jsonResult = (try? JSONSerialization.jsonObject(with: jsonData!, options: [])) as? [String:Any] {
    if let companyList = jsonResult["CompanyList"] as? [[String:Any]] {
        //Now loop through the companyList array
        let arr_CompanyList = companyList.flatMap(CompanyList.init)
        //To get array of companyname
        let companyNames = companyList.flatMap { $0["Company_Name"] as? String }
        print(companyNames)
    }
}

现在只需与您的CompanyList类添加一个init

public class CompanyList {
    public var companyAlt_Key : Int?
    public var company_Name : String?
    public var tableName : String?

    init?(dictionary: [String:Any]) {
        guard let companyAltKey = dictionary["CompanyAlt_Key"] as? Int, 
           let companyName = dictionary["Company_Name"] as? String,
           let tableName = dictionary["TableName"] as? String else {
               return nil
        }
        self.companyAlt_Key = companyAltKey
        self.company_Name = companyName
        self.tableName = tableName
    }
}

注意:init?中使用dictionary,您需要访问根据类属性包含值的密钥。

最新更新