Swift3 将JSON字符串解析为模型对象类型数组
我通过下面的方法从API中获得加密数据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
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)
}