Bug avec JSONDecoder

Hello tout le monde !!

J’ai une erreur dans mon code au niveau de la conversion du fichier JSON que je reçois suite à l’appel au JSONDecoder. Je me doute que l’objet que j’ai déclaré qui correspond exactement au format JSON doit comporter une erreur dans sa description.
Comment puis-je trouver facilement la variable de mon objet qui pose problème ?

Mon fichier JSON est très long et je n’ai pas la patience de faire une comparaison ligne par ligne :slight_smile:

Merci d’avance pour votre aide !!

Quelle est l’erreur affichée exactement ? Normalement elle devrait te donner des indications sur le soucis rencontré.

Dans mon guard, je renvoie vers mon manager de données une error data que je créée. Donc j’affiche le libellé « Problème de data » mais je ne sais pas comment afficher l’erreur système :grin:

Voici mon code sur ma request :

guard let downloadedDetailsResponse = try? JSONDecoder().decode(Details.self, from: data) else {
            throw DetailsError.dataError
        }

et voici le code de mon manager :

do {
            let detailsShow = try await discoverRequest.detailShowRequest(showId: showID)
            objectWillChange.send()
            self.detailShow = detailsShow
        } catch DetailsError.URLDetailsError {
            print("L'URL n'est pas au format attendue")
        } catch DetailsError.httpStatusCodeError {
            print("Le serveur a renvoyé une erreur de connexion")
        } catch DetailsError.dataError {
            print("Une erreur de format JSON est présente dans les datas retournées")
        } catch {
            print(error)
        }

Et j’obtiens ce code erreur : " Une erreur de format JSON est présente dans les datas retournées". J’aimerais pouvoir visualiser l’erreur système qui est généré dans mon cas.

Bonjour,

Pour info @Tazooou tu as des validateurs de JSON disponibles en ligne. Si les données ne sont pas à caractères privées ou autres, tu peux tester ton fichier json pour voir si il est valide.

Par exemple, tu as ce site :

Il est bien valide. Je l’avais déjà testé sur Android. Je pense que le problème vient plus de ma déclaration de ma classe qui est supposée accueillir la transformation

Une erreur que tu peux avoir, dans ton fichier json certaines clés du fichier ne contiennent pas les données attendues. je m’explique

exemple
struct communes:Decodable {
var nom:String
var code:String
var population:Int?
}
Dans le fichier json que j’utilise pour exemple toutes les valeurs de la population n’ont pas été saisies donc je suis obligé de gérer une exception au niveau du décodage avec un optionnel pour la clé.

Je n’ai pas regardé toutes les clés et la valeur à la main +30 000 dans mon cas j’ai testé champ après champ pour savoir lequel posait problème tu as peut-être un problème du même ordre.

Si tu veux connaître l’erreur JSON exacte, tu dois utiliser le do ... catch au niveau du JSONDecoder().decode().
Dans ton code tu utilise un try? à ce moment là donc tu perds l’erreur et tout ce qui te reste est un DetailsError.dataError sans aucune info à l’intérieur.

1 « J'aime »

Hello, certainement une erreur de décoding de ton JSON. Regarde de ce côté : Apple Developer Documentation

Hello tout le monde,

En installant le do catch, j’ai réussi à trapper l’erreur et corriger rapidement ma structure de donnée.

Je vous mets la correction appliquée. Ça peut toujours servir à quelqu’un :slight_smile:

do{
   detailShow = try JSONDecoder().decode(Details.self, from: data)
   }catch {
    print(error)
    throw DetailsError.dataError
   }
        
1 « J'aime »