需要对具有json对象的数组进行排序

问题描述 投票:0回答:2

json数据从dataTask网络调用返回并分配给数组:

   let json = try? JSONSerialization.jsonObject(with: data!, options: [])
      if let jsonarray = json as? [Any] {
        self.cardArray = jsonarray
     }

json看起来像这样:

[ 
  {
    "deviceID":114,
    "UserName":"[email protected]",
    "Name":"under sink",
    "UniqueId":"D0:B5:C2:F2:B8:88",
    "RowCreatedDateTime":"2018-01-02T16:07:31.607"
  }
]

如何根据名为RowCreatedDateTime的json属性对此数组进行排序(降序)?

我尝试了这个,但它不起作用:

cardArray.sort{
    $0.RowCreatedDateTime < $1.RowCreatedDateTime
}
json swift
2个回答
2
投票

假设所有字典都包含密钥RowCreatedDateTime,您必须按键获取值。您不能将点符号与字典一起使用。

cardArray.sort{
    ($0["RowCreatedDateTime"] as! String) < $1["RowCreatedDateTime"] as! String
}

如果你知道数组的类型是[[String:Any]]从来没有把它投射到更加未指定的[Any]


cardArray声明为字典数组

var cardArray = [[String:Any]]()

并以这种方式解析JSON

do {
    if let jsonArray = try JSONSerialization.jsonObject(with: data!) as? [[String:Any]] {
        self.cardArray = jsonArray
    }
} catch { print(error) }

考虑在Swift 4中使用Codable将JSON解析为结构体。这使事情变得更容易。


0
投票

制作cardArray [[String:Any]]而不是[Any]

var cardArray = [[String:Any]]()

然后

let json = try? JSONSerialization.jsonObject(with: data!, options: [])
if let jsonarray = json as? [[String:Any]] {
    self.cardArray = jsonarray
} else {
    self.cardArray = []
}

最后

self.cardArray.sort {
    guard let left = $0["RowCreatedDateTime"] as? String else { return true }
    guard let right = $1["RowCreatedDateTime"] as? String else { return false }

    return left < right
}
© www.soinside.com 2019 - 2024. All rights reserved.