我如何解析 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 的传入数据转换为二维数组

如何解析 JSON 以将其转换为 Swift 中的对象数组?

在我们将其解析为 JSON 之前,Snowflake 如何转义对象数组字符串中的所有特殊字符?

从数据中提取 JSON 数组

在 Objective-C 中解析 JSON 数组