2017-02-20 2 views
0
let jsonResult = try JSONSerialization.jsonObject(with: jsonData!, options: .mutableContainers) as! NSDictionary 

Когда отладчик приходит на строке выше, в отладочной консоли есть ->Как получить элемент из JsonResult с помощью петли (Swift 3)

jsonResult =(NSDictionary) 2 key/value pairs 
>[0] = “CompanyList” : 140 elements 
>[1] = “StatusTable” : 1 element 

JsonResult содержит 2 массива

Теперь я хочу пройти CompanyList с помощью Loop как

let arr_CompanyList = [CompanyList]() 
for dictionary in json as! [[CompanyList]] 
{ 
    //arr_CompanyList.append(dictionary)    
} 

но дает ошибку

Вот CompanyList Class

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

Как я должен делать?

ответ

1

Вы не можете преобразовать свой ответ на массив JSON непосредственно в массив объектов класса объектов, вам нужно создать свой собственный объект класса из ответа JSON. Также вместо использования NSDictionary в быстром использовании родной тип Dictionary.

if let jsonResult = (try? JSONSerialization.jsonObject(with: jsonData!, options: [])) as? [String:Any] { 
    if let companyList = jsonResult["CompanyList"] as? [[String:Any]] { 
     //Now loop through the companyList array 
     let arr_CompanyList = companyList.flatMap(CompanyList.init) 
     //To get array of companyname 
     let companyNames = companyList.flatMap { $0["Company_Name"] as? String } 
     print(companyNames) 
    } 
} 

Теперь просто добавьте одну init с CompanyList класса, как этот путь.

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


    init?(dictionary: [String:Any]) { 
     guard let companyAltKey = dictionary["CompanyAlt_Key"] as? Int, 
      let companyName = dictionary["Company_Name"] as? String, 
      let tableName = dictionary["TableName"] as? String else { 
       return nil 
     } 
     self.companyAlt_Key = companyAltKey 
     self.company_Name = companyName 
     self.tableName = tableName 
    } 
} 

Примечания: Внутри init? метод с dictionary вам необходимо получить доступ к ключу, который содержит значение в соответствии с вашим классом.

+0

Это работает для вас? –

+0

@DilipJangid Откуда вы получаете этот Jsonresult, если он уже является массивом 'CompanyList', то чего вы хотите. –

+0

@DilipJangid, если ваш массив уже является типом 'CompanyList', то что вы хотите с ним делать, вы хотите преобразовать его в ответ JSON? –

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