2017-02-18 75 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)'。 –