2017-02-18 50 views
2

我被加密的数据从API击中由以下方法解析JSON字符串模型对象类型阵列

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分的记录,有超过1个记录的JSON字符串)

{ 
    "CompanyAlt_Key": 1, 
    "Company_Name": "XYZ LTD", 
    "TableName": "CompanyList" 
}, 

我有相同类型的模型

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字符串型CompanyLi的数组ST类

帮助将欣赏

+0

它似乎没有加密数据,只是编码。主要区别在于加密数据需要密钥才能解密,而编码数据则不需要。加密的例子包括AES,RSA和EC,而编码的例子包括十六进制,URL编码,ASCII,UTF-8和Base64。 – zaph

回答

0

你需要你的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) 
} 

CompanyList实现一个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确保你没有任何可选元素在你的array ...

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

您的代码运行时没有错误,但是如何将CompanyList类型的对象添加到CompanyList的数组中。在这种方法让公司=阵列?.map { 返回CompanyList(字典:$ 0) },它返回, –

+0

让阵列=尝试JSONSerialization.jsonObject(与:jsonData !,选项:[])? [[String:Any]] array也为零, –

+0

追加到现有数组:'myArray.append(contentsOf:otherArray)'。 –