2016-04-21 152 views
0

当我通过Alamofire从我的http请求中取回JSON时,我在本文底部提到了以下swiftyjson JSON对象。Swiftyjson - JSON到按字母顺序排列的表格视图

如何提取这种格式的部分?

  • VAR节:[(指数:中等,长度:中等,标题:字符串)] =阵列()
  • 长度为下各部分接触的数目。标题字母

然后我怎样才能提取每个字母下的每个对象的数组?

所有使用swift的。

目标是创建一个联系人列表与一个tableview和按字母顺序的部分。

如果我不清楚,请让我知道。

JSON对象:

{ 
    "T" : [ 
    { 
     "location" : "Shanghai", 
     "firstName" : "User3", 
     "id" : 3, 
     "created_at" : "2016-04-19 12:54:23", 
     "birthDate" : "2016-04-17", 
     "email" : "[email protected]", 
     "profilePhotoPath" : "photos\/emptyProfilePhoto.jpg", 
     "updated_at" : "2016-04-19 12:54:23", 
     "lastName" : "Test" 
    } 
    ], 
    "G" : [ 
    { 
     "location" : "Jakaylaborough", 
     "firstName" : "Lambert", 
     "id" : 4, 
     "created_at" : "2016-04-19 23:25:39", 
     "birthDate" : "0000-00-00", 
     "email" : "[email protected]", 
     "profilePhotoPath" : "photos\/emptyProfilePhoto.jpg", 
     "updated_at" : "2016-04-19 23:25:39", 
     "lastName" : "Gulgowski" 
    } 
    ], 
    "W" : [ 
    { 
     "location" : "East Sydni", 
     "firstName" : "Jedediah", 
     "id" : 5, 
     "created_at" : "2016-04-19 23:25:39", 
     "birthDate" : "0000-00-00", 
     "email" : "[email protected]", 
     "profilePhotoPath" : "photos\/emptyProfilePhoto.jpg", 
     "updated_at" : "2016-04-19 23:25:39", 
     "lastName" : "Wehner" 
    }, 
    { 
     "location" : "East Rebeccaton", 
     "firstName" : "Addison", 
     "id" : 6, 
     "created_at" : "2016-04-19 23:25:39", 
     "birthDate" : "0000-00-00", 
     "email" : "[email protected]", 
     "profilePhotoPath" : "photos\/emptyProfilePhoto.jpg", 
     "updated_at" : "2016-04-19 23:25:39", 
     "lastName" : "Weimann" 
    } 
    ] 
} 
+0

你有什么试过的?这似乎是一个使用reduce的相对无痛的过程。 –

+0

@JefferyThomas我在下面的答案中的代码正在工作。唯一的问题是,我的部分不是按字母顺序排列的... – sbkl

+0

@JefferyThomas上个问题已解决,并在下面编辑。让我知道如果有任何评论。 – sbkl

回答

0

刚刚发现我的方式。下面回答。

var sections : [(index: Int, length :Int, title: String)] = Array() 
var contactsSorted: [JSON] = [JSON]() 

// Delegate from my contact protocol 
func didReceiveContacts(contacts: JSON){ 

    var index = 0 

    for (key,subJson):(String, JSON) in contacts { 

     let title = "\(key)" 

     let newSection = (index: index, length: subJson.count, title: title) 

     sections.append(newSection) 

     contactsSorted.append(subJson) 

     index += 1 
    } 
    // EDIT:Sort the sections by title to retrieve the alphabetical order 
    sections.sortInPlace({ $0.title < $1.title }) 

    self.tableView.reloadData() 
} 

// tableView delegate methods 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 

    return sections.count 

} 

func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 

    return sections[section].title 

} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return sections[section].length 

} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

let cell = self.tableView.dequeueReusableCellWithIdentifier("contactCell")! as! ContactTableViewCell 

cell.nameLabel.text = contactsSorted[sections[indexPath.section].index].array![indexPath.row]["firstName"].string! + " " + contactsSorted[sections[indexPath.section].index].array![indexPath.row]["lastName"].string! 

}