2017-08-28 27 views
-2

我想解析JSON到數組中。根據最高預約進行排序。然後使用該新數組在領導板tableview上填充它。我如何解析JSON,將其排序在數組中。拉出數據並填充到tableview?

我使用SwiftJson 滯留在分揀到數組

會需要填充名稱和值的實現代碼如下降序休息。

這是我的小片段。

 let jsonUrl = URL(string: url) 
     URLSession.shared.dataTask(with: jsonUrl!) { (data, response, error) in 
      guard let data = data else { return } 
      let jsonResult : JSON = JSON(data) 
      print(jsonResult) 


    } .resume() 

以下是輸出

{ 
    "Activities" : { 
    "AHiHr9bzGXcN7pxvR68wulD9zqE3" : { 
     "Case Closed" : "2", 
     "Name" : "Tim Mac", 
     "Appointment Made" : "2", 
     "Prospects Met" : "2", 
     "Policy Servicing" : "2" 
    }, 
    "gDKBlbeMsiUUFaASOLn6eOdCIrJ3" : { 
     "Case Closed" : "1", 
     "Name" : "Jane Simpson", 
     "Appointment Made" : "1", 
     "Prospects Met" : "1", 
     "Policy Servicing" : "1" 
    }, 
    "W8uWoLf9qRX4a9BgXjLw5VZXjFu1" : { 
     "Case Closed" : "3", 
     "Name" : "John Doe", 
     "Appointment Made" : "4", 
     "Prospects Met" : "3", 
     "Policy Servicing" : "2" 
    } 
    } 
} 
+0

'JSONSerialization'或使用外部庫如'SwiftyJSON' – sCha

+2

「我如何解析JSON,在數組中排序。拉出數據並填充到tableview?這是三個不同的問題,每個問題都已經被問到,並且有答案。另外'JSON = JSON(數據)'那是什麼代碼?你已經解析了,不是嗎? – Larme

+0

上面的一個不是字典的數組它是字典的字典 – Vinodh

回答

0

你可以得到所有值作爲字典的數組和排序它像:

guard let Activities = jsonResult?["Activities"] as? [String:AnyObject] else { 
      return 
     } 

     var values = [Dictionary<String, AnyObject>]() 

     for (_, value) in Activities { 
      values.append(value as! Dictionary<String, AnyObject>) 
     } 


     let sorted = values.sorted { (dic1, dic2) -> Bool in 

      Int(dic1["Appointment Made"] as? String ?? "") ?? 0 > Int(dic2["Appointment Made"] as? String ?? "") ?? 0 

     } 

     print(sorted) 

//建模數據

for item in sorted { 

      let model = Model.init(jsonData: item) 

      // use model 
     } 

//你的模型

class Model: NSObject { 

    var caseClosed :Int? 
    var name :String? 
    var appointmentMade :Int? 
    var prospectsMet :Int? 
    var policyServicing :Int? 



    override init() { 
     super.init() 
    } 

    init(jsonData : [String:AnyObject]) { 

     // map data to object 

    } 
} 
+0

Hi bro!感謝您的幫助。我已經接近答案了。如果對你提供的答案稍作修改,我就可以得到這個輸出 [[「預約已完成」:4,「預期已到達」:3,「政策服務」:2,「姓名」:John Doe,案例關閉「:3],[」預約「:2,」預期會見「:2,」政策服務「:2,」名稱「:Tim Mac,」案例關閉「:2],[」預約「: 1,「預見會見」:1,「政策服務」:1,「名稱」:簡辛普森,「案例關閉」:1]] – Xan

+0

我如何將它們分配給數據模型數組,以便我可以填充它們。對於單個數據模型,我可以填充。但對於我不知道的一系列數據。 =(對不起,我是非常小巧的) – Xan

+0

創建具有此屬性的模型併爲此模型傳遞排序後的數組是否需要它 –

-1

使用JsonSerialisation jsonObjectWithData轉換JSON響應的NSArray對象。然後運行一個for循環,訪問數組中的每個元素作爲NSDictionary,並比較它們的最高預約值。

要了解更多關於的NSDictionary訪問值,apple docs reference

爲了更多地瞭解JSON的斯威夫特,apple docs reference

-1

我有嘗試這種排序:

let activitiesDict = jsonData?["Activities"] as? [String:Any] 

let activitiesArray = activitiesDict.map({ [$0.0 : $0.1] }) 

let sortedActivitiesArray = self.activitiesArray.sorted { 
      (Int((($0 as! Dictionary<String, Any>)["Appointment Made"] as? String)!))! > (Int((($1 as! Dictionary<String, Any>)["Appointment Made"] as? String)!))!  
     } 
print(sortedActivitiesArray) 

希望它有幫助。

+1

問題中的代碼顯然是Swift 3. Swift 3中的JSON字典的類型是'[String:Any]'。並且不要在Swift中提供'NSMutable ...'集合類型。 – vadian

+0

@vadian:我改變了格式。我添加了我在項目中使用的代碼,以提供一個想法。 – Amit