/ / जेसन ऑब्जेक्ट्स के साथ सरणी को सॉर्ट करने की आवश्यकता है - जेसन, स्विफ्ट

जेसन ऑब्जेक्ट्स के साथ सरणी को सॉर्ट करने की आवश्यकता है - जेसन, स्विफ्ट

जेसन डेटा डेटा टास्क नेटवर्क कॉल से वापस कर दिया गया है और यहां एक सरणी को असाइन किया गया है:

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

जेसन इस तरह दिखता है:

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

RowCreatedDateTime नामक जेसन संपत्ति के आधार पर मैं इस सरणी को कैसे घुमा सकता हूं?

मैंने कोशिश की लेकिन यह काम नहीं किया:

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

उत्तर:

जवाब के लिए 2 № 1

मानते हैं कि सभी शब्दकोशों में कुंजी होती है 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) }

उपयोग करने के लिए विचार करें Codable जेएसओएन को structs में पार्स करने के लिए स्विफ्ट 4 में। इससे चीज़ें बहुत आसान हो जाती हैं।


जवाब के लिए 0 № 2

बनाना 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
}