我如何解析 JSON,将其排序为数组。提取数据并填充到表格视图中?
Posted
技术标签:
【中文标题】我如何解析 JSON,将其排序为数组。提取数据并填充到表格视图中?【英文标题】:How do i parse JSON, sort it in an array. Pull out the data and populate to a tableview? 【发布时间】:2017-08-28 07:12:01 【问题描述】:我正在尝试将 JSON 解析为数组。根据作出的最高预约对其进行排序。然后使用该新数组将其填充到排行榜表格视图中。
我正在使用 SwiftJson 卡在排序到数组中
需要按降序填充 Name 和 tableview 中的其余值。
这是我的 sn-ps。
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"
【问题讨论】:
JSONSerialization
或使用外部库,如SwiftyJSON
"我如何解析 JSON,将其排序为数组。提取数据并填充到 tableview?"那是 3 个不同的问题,每个问题都已经在 SO 上被问过并有答案。还有JSON = JSON(data)
那代码是什么?你已经在解析了,不是吗?
以上不是字典数组而是字典字典
请检查这可能会有所帮助:***.com/questions/35431754/…
请search,这类问题是十大问题之一。
【参考方案1】:
您可以将所有值作为字典数组并对其进行排序:
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
【讨论】:
你好兄弟!感谢您的帮助。我已经接近答案了。通过对您提供的答案进行一些修改,我能够得到这个输出 [["Appointment Made": 4, "Prospects Met": 3, "Policy Servicing": 2, "Name": John Doe, "Case Closed ": 3], ["预约": 2, "Prospects Met": 2, "Policy Servicing": 2, "姓名": Tim Mac, "Case Closed": 2], ["预约": 1, “Prospects Met”:1,“Policy Service”:1,“Name”:Jane Simpson,“Case Closed”:1]] 如何将它们分配给数据模型数组,以便填充它们。对于单个数据模型,我可以填充。但是对于它的数组,我不知道。 =(对不起,我很菜鸟。 创建。具有此属性的模型并为此模型传递排序数组是否需要它 问题中的代码明显是Swift 3。Swift 3中JSON字典的类型是[String:Any]
你可以使用 Any 代替 Anybject 不会造成任何问题【参考方案2】:
使用 JsonSerialisation jsonObjectWithData 将 jSon 响应转换为 NSArray 对象。并运行一个 for 循环,以 NSDictionary 的形式访问数组中的每个元素,并比较它们的值以获得最高任命。
要了解有关从 NSDictionary 访问值的更多信息,apple docs reference
要了解有关在 swift 中使用 json 的更多信息,apple docs reference。
【讨论】:
【参考方案3】:我试过这种排序:
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)
希望对你有帮助。
【讨论】:
问题中的代码显然是Swift 3。Swift 3中JSON字典的类型是[String:Any]
。并且不要在 Swift 中建议 NSMutable...
集合类型。
@vadian :我改变了格式。我添加了我在项目中使用的代码来给出一个想法。以上是关于我如何解析 JSON,将其排序为数组。提取数据并填充到表格视图中?的主要内容,如果未能解决你的问题,请参考以下文章
如何对 Javascript 对象进行排序,或将其转换为数组?
如何解析 JSON 以将其转换为 Swift 中的对象数组?