-1
votes

Impossible de convertir l'objet JSON en structure

Je veux convertir le JSON forme l'URL suivante à la structure. Mais, je reçois l'erreur ne pouvait pas lancer la valeur de type '__nsarrayi' sur 'nsdata'

voici l'URL pour l'échantillon de données JSON https://jsonplaceholder.typicode.com / Posts

Voici la structure xxx

Voici la communication du serveur xxx < P> Aussi, si vous supprimez la valeur comme! Data alors l'erreur suivante se produira. xxx

Quelle est la raison pour laquelle je reçois l'erreur et comment réparer cela?


0 commentaires

3 Réponses :


2
votes

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)
       }    
    }


2 commentaires

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 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 et goutte jsondecoder .



0
votes

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)
        }

    }


0 commentaires

0
votes

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)
            }
        }


0 commentaires