Je veux convertir le JSON forme l'URL suivante à la structure. Mais, je reçois l'erreur voici l'URL pour l'échantillon de données JSON Voici la structure p> Voici la communication du serveur p> Quelle est la raison pour laquelle je reçois l'erreur et comment réparer cela? P> p> ne pouvait pas lancer la valeur de type '__nsarrayi' sur 'nsdata' code>
https://jsonplaceholder.typicode.com / Posts Code> P>
comme! Data code> alors l'erreur suivante se produira. P>
3 Réponses :
Vous devez passer .Responsedata code> plutôt que
.Responsejson code> pour obtenir les données brutes,
.Responsejson code> renvoie un type de collection.
AF.request("https://jsonplaceholder.typicode.com/posts")
.responseJSON { response in
switch response.result {
case let .success(value):
if let array = value as? [[String:Any]] {
let model = array.map { GetHelp(id: $0["id"] as! Int,
userId: $0["userId"] as! Int,
title: $0["title"] as! String,
body: $0["body"] as! String)}
print(model)
}
case let .failure(error): print(error)
}
}
Merci pour le correctif. Mais je m'attends à Json de la réponse. Alors pourquoi pas réponseJ'aiée?
Vous attendez JSON, mais l'objet retourné est une gamme de dictionnaires et JSondecoder code> attend des données brutes. Bien sûr, vous pouvez utiliser le tableau retourné, mais vous devez alors cartographier les dictionnaires sur votre modèle manuellement i> et goutte
jsondecoder code>.
Vous pouvez directement prendre les données de la réponse même lorsque vous utilisez un bloc de réponseJSON
request("https://jsonplaceholder.typicode.com/posts") .responseJSON { response in switch response.result { case let .success(value): do { let decoder = JSONDecoder() if let data = response.data { let model = try decoder.decode([GetHelp].self, from: data) print(model) } } catch let parsingError { print("Error", parsingError) } case let .failure(error): print(error) } }
Il n'y a pas besoin de traiter manuellement des réponses décodables code> dans Alamofire 5, vous pouvez maintenant le faire directement:
AF.request("https://jsonplaceholder.typicode.com/posts")
.responseDecodable(of: GetHelp.self) { response in
switch response.result {
case let .success(value): print(value)
case let .failure(error): print(error)
}
}