/ / pole s objektmi json je potrebné zoradiť - json, swift

pole s objektmi json je potrebné zoradiť - json, swift

json dáta sa vrátia z sieťového hovoru dataTask a priradia sa tu pole:

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

json vyzerá takto:

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

ako môžem zoradiť (zostupne) toto pole na základe vlastností json s názvom RowCreatedDateTime?

Snažil som sa to, ale to nefungovalo:

cardArray.sort{
$0.RowCreatedDateTime < $1.RowCreatedDateTime
}

odpovede:

2 pre odpoveď č. 1

Za predpokladu, že všetky slovníky obsahujú kľúč RowCreatedDateTime musíte získať hodnoty podľa kľúča. Označenie bodov nemôžete používať slovník.

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

A ak viete, že typ poľa je [[String:Any]] nikdy ju neodovzdajte oveľa neskôr [Any].


vyhlásiť cardArray ako súbor slovníkov

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

a analyzovať JSON týmto spôsobom

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

Zvážte použitie Codable v Swift 4, aby analyzoval JSON do štruktúr. To zjednodušuje veci.


0 pre odpoveď č. 2

Urobiť cardArray [[String:Any]] namiesto [Any].

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

potom

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

konečne

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
}