Swift3 将JSON字符串解析为模型对象类型数组

Swift3 将JSON字符串解析为模型对象类型数组,swift3,Swift3,我通过下面的方法从API中获得加密数据 URLSession.shared.dataTask(with: url!) 将数据转换为JSON,但仍然是加密的 var json = try(JSONSerialization.jsonObject(with: data!, options: .allowFragments)) 将其转换为字符串 let arr:String = json as! String 解密 let jsonText = arr.fromBase64()//exten

我通过下面的方法从API中获得加密数据

URLSession.shared.dataTask(with: url!) 
将数据转换为JSON,但仍然是加密的

var json = try(JSONSerialization.jsonObject(with: data!, options: .allowFragments))
将其转换为字符串

let arr:String = json as! String 
解密

let jsonText = arr.fromBase64()//extension method, given end of question
现在它是Json格式的,如下所示(这只有1条记录,Json字符串中有1条以上的记录)

我有一个同类型的模型

public class CompanyList {
    public var companyAlt_Key : Int?
    public var company_Name : String?
    public var tableName : String?
}
下面是fromBase64方法

func fromBase64() -> String {
    let data = NSData.init(base64Encoded: self, options: []) ?? NSData()
    return String(data: data as Data, encoding: String.Encoding.utf8) ?? ""
}
我面临的问题是如何将Json字符串放入CompanyList类类型的数组中


非常感谢您的帮助

您需要先将
jsonString
转换为数据:

let jsonData = jsonString.data(using: .utf8)!
将数据转换为数组

let array = JSONSerialization.jsonObject(with: jsonData, options: nil) as? [[String: Any]]
然后遍历数组

let companies = array?.map {
    return CompanyList(dictionary: $0)
}
为您的
公司列表
实现一个
init
方法,为响应中的每个记录传递一个字典

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

    init(dictionary: [String: Any]) {        
        companyAlt_Key = dictionary["companyAlt_Key"] as? Int
        company_Name = dictionary["company_Name"] as? String
        tableName = dictionary["tableName"] as? String
    }
}
您还可以使用它来验证数据。如果类中的字段是非可选的,则可以使用可选的
init
,如下所示

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

    init?(dictionary: [String: Any]) {        
        guard let companyAlt_Key = dictionary["companyAlt_Key"] as? Int,
        let company_Name = dictionary["company_Name"] as? String,
        let tableName = dictionary["tableName"] as? String else {
            return nil 
        }

        self.companyAlt_Key = companyAlt_Key
        self.company_Name = company_Name
        self.tableName = tableName
    }
}
如果使用可选的init,请使用
flatMap
确保数组中没有任何可选元素

let companies = array?.flatMap {
    return CompanyList(dictionary: $0)
}

似乎您没有加密的数据,只是进行了编码。主要区别在于加密数据需要密钥才能解密,而编码数据则不需要密钥。加密示例包括AES、RSA和EC,而编码示例包括十六进制、URL编码、ASCII、UTF-8和Base64。您的代码运行时没有错误,但如何将CompanyList类型的对象附加到CompanyList数组中。在这个方法中,让companys=array?.map{return CompanyList(dictionary:$0)},它返回,让array=try JSONSerialization.jsonObject(with:jsonData!,options:[])作为?[[String:Any]]数组也为零,要附加到现有数组:
myArray.append(contentsOf:otherArray)
。如果您只是尝试
let array=try JSONSerialization.jsonObject(with:jsonData!,options:[])
数组是否为零?它是否抛出错误?它不会抛出任何错误,但在调试器上显示为零
let companies = array?.flatMap {
    return CompanyList(dictionary: $0)
}