/ / कैसे एक alamofire अनुरोध से एक संग्रह deserialize करने के लिए - स्विफ्ट, alamofire

एक अलामोफायर अनुरोध से एक संग्रह को deserialize कैसे - तेजी से, alamofire

यह अलमोफायर और स्विफ्ट में रिस्पॉन्सजोन संग्रह के deserializing के लिए वाक्यविन्यास का एक बहुत ही मूल प्रश्न है

मेरे पास एक GET सेवा है जो उपयोगकर्ता ऑब्जेक्ट की एक सरणी लौटाती है उदा

[
{"uname": "bob"},
{"uname": "jane"}
]

और यहाँ मेरा अनुरोध है

   Alamofire.request(.GET, url , encoding:.JSON)
.responseJSON(options: .MutableContainers, completionHandler:{ (request, response, JSON, error) -> Void in
let result = JSON as? [Dictionary<String,String>]
if (response!.statusCode == 200 && error == nil){
//how should I deserialize the result here to return [String]
callback(success: true, errorMsg: nil, friends:friends)
}
else{
callback(success: false,errorMsg:error?.localizedDescription,friends:nil)
}
})

मेरा प्रश्न यह है कि परिणाम को कैसे मिटाया जाए, और क्या मैं यह मानने के लिए सही हूं कि json परिणाम एक [शब्दकोश] है और मेरे लिए इसे [स्ट्रिंग] परिणाम में बदलने के लिए, क्या मुझे इसका नक्शा बनाना चाहिए?

अगर मैं नीचे दिए गए सिंटैक्स का उपयोग करता हूं तो मेरे पास कुछ प्रश्न हैं

let friends = result?.map {
return $0["uname"] as String?
}

वैकल्पिक रिटर्न वैल्यू के साथ मैं इसे एक शानदार तरीके से [स्ट्रिंग]? के बजाय एक [स्ट्रिंग] को वापस करने के लिए प्राप्त कर सकता हूं - isn "t वहाँ एक रास्ता एक संक्षिप्त वाक्य रचना में किसी भी तरह से केवल अशक्त मानों को वापस करने के लिए एक रास्ता है?

मानचित्र के लिए एक बेहतर वाक्यविन्यास भी है जो मुझे $ 0 का उपयोग करने के बजाय मापदंडों का नाम देता है?

उत्तर:

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

मैं नौकरी करने के लिए स्विफ्टजैन्स के साथ अलमॉफायर का उपयोग करता हूं और देशी वस्तुओं के JSON ऑब्जेक्ट्स की डेसिरिसेलाइज़ सरणी करता हूं। यहाँ एक उदाहरण है कि मैं इसे कैसे करता हूँ:

Alamofire.request(request)
.responseJSON(options: nil) { (request, response, json, error) -> Void in
if let requestError = error as NSError?{
callback!(nil, nil, requestError)
}
if let httpResponse = response as NSHTTPURLResponse?{
if(httpResponse.statusCode != 200){
callback!(nil, httpResponse, nil)
} else{
let jsonResult = JSON(json!) as JSON
var concerts = self.deserializeConcerts(jsonResult)
callback!(concerts, nil, nil)
}
}
}

इस तरह दिखता है

class private func deserializeConcerts(concerts: SwiftyJSON.JSON) -> [ConcertModel]{
let concertsArray = concerts.object as! NSMutableArray
var concertObjs = [ConcertModel]()
for concert in concertsArray{
let concertObj = ConcertModel(concert: concert as! NSDictionary)
concertObjs.append(concertObj)
}
return concertObjs
}

और अंत में, ConcertModel इनिशियलज़र अभी कॉन्सर्टमॉडल ऑब्जेक्ट के गुणों के लिए एनएसबर्ड के मूल्यों को मैप करता है।


उत्तर № 2 के लिए 1

Alamofire 4.3 के लिए अद्यतित कार्यान्वयन

Alamofire.request(url, method: .get)
.responseJSON { response in
if response.data != nil {
let json = JSON(data: response.data!)
let name = json["data"][0]["name"].string
if name != nil {
print(name!)
}
}
}

यह JSON इनपुट पार्स करेगा:

{
data: [
{ name: "John" },
{ name: "Dave" }
]
}