2017-02-18 4 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 записей в 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 го класса

Помощь будет оценить

+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) 
} 

Реализовать init метод для CompanyList, переходящий в словаре для каждой записи в ответ ...

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 
    } 
} 

Если вы используете дополнительные инициализации, используйте flatMap, чтобы убедиться, что вы не имеете какие-либо дополнительные элементов в массив ...

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

ваш код работает без ошибок, но как добавить объект типа CompanyList в массив CompanyList. в этом методе let companies = array? .map { return CompanyList (словарь: $ 0) }, он возвращает, –

+0

let array = попробуйте JSONSerialization.jsonObject (с помощью jsonData !, options: []) as? [[String: Any]] array также nil, –

+0

Чтобы добавить к существующему массиву: 'myArray.append (contentsOf: otherArray)'. –

Смежные вопросы