| |
Membre enregistré 841 messages Popularité : +19 (27 votes) |
|
Posté le 12 décembre 2017 - 11:24 |
Bonjour,
JSONversvariant converti un Json en variant mais si le Json est invalide ou si une erreur de transmission de donnés se produit cette fonction crée une erreur fatal. Y a t'il un moyen de vérifier la validité du Json ? personnellement je n'en n'ai pas trouvé
Merci
-- Cordialement, Camus |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 165 messages Popularité : +18 (20 votes) |
|
Posté le 12 décembre 2017 - 12:11 |
Bonjour,
Si le JSON est invalide, JSONVersVariant lève une exception (comme vous l'indiquez). Il suffit donc de gérer les exceptions pour cet appel pour traiter le cas où le JSON est incorrect
vSourceJSON est un Variant QUAND EXCEPTIONEXCEPTION DANS vSourceJSON = JSONVersVariant(sSourceJSON) ... FAIRE ... FIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 841 messages Popularité : +19 (27 votes) |
|
Posté le 12 décembre 2017 - 12:37 |
Merci,
J'y avais pensé mais je suis déjà dans un cycle EXCEPTION ou je gère d'autres problèmes. L'idéal aurait été que cette fonction renvoie 0 ou -1 en cas d'erreur. J'ai contourné le problème en validant la présence dans le texte retourné de 2 variables qui devraient s'y trouvé.
Merci
-- Cordialement, Camus |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 96 messages Popularité : +18 (20 votes) |
|
Posté le 12 décembre 2017 - 15:05 |
En se basant sur le code de Jarod, on peut créer une fonction JSonVersVariantPerso et gérer l'erreur par ErreurDéclenche.
Procedure JSonVersVariantPerso(CodeJson) Résultat est un variant QUAND EXCEPTIONEXCEPTION DANS Résultat = JSONVersVariant(CodeJson) FAIRE ErreurDéclenche(1, ExceptionInfo()) FIN RENVOYER Résultat
Et pour l'utiliser
MonVariant est un variant = JSonVersVariantPerso(CodeJson) SI ErreurDétectée ALORS ... SINON ... FIN
La fonction renvoie toujours le variant, mais vous avez le moyen de détecter l'erreur. Qu'en pensez-vous ?
-- Johjo aka Jonathan Laurent
Mon blog sur WinDev : http://blog.ytreza.org Me contacter par Twitter : @Johjo07Message modifié, 12 décembre 2017 - 15:09 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 928 messages Popularité : +30 (92 votes) |
|
Posté le 12 décembre 2017 - 20:12 |
Coucou,
Carrement inspirer de ce que vous avez dit, mais je serais plus parti sur un truc comme sa
Du coup le MonVariant est un variant sera a null
On peut toujours utiliser le ErreurDétectée si on laisse ErreurPropage() ou ExceptionPropage(), et sinon tester si le variant et null si on les enleves ? Votre avis?
Procedure JSonVersVariantPerso(_sCodeJSon)
ErreurChangeParamètre(epGotoCasErreur) ExceptionChangeParamètre(epGotoCasException) _vSourceJSON est un Variant = JSONVersVariant(_sCodeJSon)
RENVOYER _vSourceJSON CAS ERREUR: ErreurPropage() RENVOYER Null CAS EXCEPTION: ExceptionPropage() RENVOYER Null
-- In üs we trust - Joyeux noël |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 280 messages Popularité : +22 (28 votes) |
|
Posté le 13 décembre 2017 - 02:18 |
Bonjour,
Pour compléter ce que Charly et Johjo ont dit : Dans le cas d'une erreur exceptionnelle si ce code doit servir de façon redondante dans l'application il ne faut pas oublier
ExceptionActive()
-- Cordialement. Je vous souhaite une bonne journée depuis le Vietnam.
Olivier. http://www.impulse-web.com |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 841 messages Popularité : +19 (27 votes) |
|
Posté le 13 décembre 2017 - 05:52 |
Je vous remercie à tous,
Effectivement il serait judicieux de réécrire une procédure perso. Je ne comprend d'ailleurs pas que Windev n'y ai pas pensé. De plus en plus de WebService REST sont utilisés et on n'est pas à l'abris d'une panne réseau au moment du retour
Bonne journée
-- Cordialement, Camus |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 96 messages Popularité : +18 (20 votes) |
|
Posté le 13 décembre 2017 - 06:43 |
@Charly : Je ne connaissais pas cette méthode de gestion des erreurs et des exceptions, merci. Je suis tout à fait d'accord avec toi, le fait de renvoyer explicitement null est une bonne idée. Par contre, je suis moins d'accord avec les points suivants : - à ma connaissance, VariantVersJSon ne déclenche pas d'erreur. Du coup, la partie de gestion des erreurs ne fonctionnera pas. - si tu propage l'exception, la valeur de retour null ne sera jamais renvoyée (ExceptionPropage force la sortie du traitement sans renvoyer de valeur). - deuxième point sur la propagation de l'exception, il faudra quand même la gérer dans le traitement appelant - Je n'ai pas testé, mais ne faut-il pas utiliser un ExceptionRestaureParamètre avant de propager l'exception ? Afin d'éviter de partir en boucle infinie ?
@Olivier : Le ExceptionActive permet de remettre en place le système d'exception, c'est bien ça ? J'ai testé et j'ai l'impression que c'est utile quand on utilise la syntaxe QUAND EXCEPTION ... FIN (sans le DANS et le FAIRE). J'ai l'impression que la syntaxe QED ... FAIRE ... FIN permet d'empiler les exceptions (enfin, mes tests me montre que ça marche). Aurais-tu un exemple que je puisse voir ?
@Tous : Du coup, pour ma part, je reste sur ce code :
Procedure JSonVersVariantPerso(CodeJson) Résultat est un variant = Null QUAND EXCEPTIONEXCEPTION DANS Résultat = JSONVersVariant(CodeJson) FAIRE ErreurDéclenche(1, ExceptionInfo()) FIN RENVOYER Résultat
ou selon la méthode de Charly (mais avec mon style d'écriture)
Procedure JSonVersVariantPerso(CodeJson) ExceptionChangeParamètre(epGotoCasException)
Résultat est un Variant = Null Résultat = JSONVersVariant(CodeJson)
CAS EXCEPTION : ErreurDéclenche(1, ExceptionInfo()) RENVOYER Résultat
Si on peut encore améliorer ce code, n'hésitez pas !
Edit : Inutile d'utiliser ExceptionRestaureParamètre, ExceptionPropage semble ignorer le "CAS EXCEPTION :" mais l'exception reste à gérer. -- Johjo aka Jonathan Laurent
Mon blog sur WinDev : http://blog.ytreza.org Me contacter par Twitter : @Johjo07Message modifié, 13 décembre 2017 - 06:47 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 280 messages Popularité : +22 (28 votes) |
|
Posté le 13 décembre 2017 - 10:29 |
@Johjo Oui Le ExceptionActive permet de remettre en place le système d'exception.
D'après la DOC: Rappel : Un traitement d'exception du WLangage ne peut servir qu'une seule fois (ceci permet d'éviter des boucles sans fin si l'exception n'est pas correctement corrigée). La fonction ExceptionActive permet de réactiver le traitement d'exception : une autre exception pourra donc être traitée par le traitement.
Voici mon code :
Procedure JSON_Valider(sJSON_Data est une chaîne ANSI) _Réponse est un Variant QUAND EXCEPTIONEXCEPTION DANS _Réponse=JSONVersVariant(sJSON_Data) FAIRE _Réponse=-1+RC+ExceptionInfo(errMessage) ExceptionActive() FIN RENVOYER _Réponse
-- Cordialement. Je vous souhaite une bonne journée depuis le Vietnam.
Olivier. http://www.impulse-web.com |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 257 messages Popularité : +35 (37 votes) |
|
Posté le 05 décembre 2019 - 14:32 |
Voici mon code pour tester la valider d'un JSON :
MonJSON est un JSON = [ { "TEST1": "DATA1", "TEST2", "DATA2" "TEST3": "DATA3", } ] Info(VerificationJson(MonJSON))
PROCEDURE INTERNE VerificationJson(LOCAL _JSON est un JSON):booléen QUAND EXCEPTIONEXCEPTION DANS SI _JSON.JSONTESTER..Existe = Faux ALORS RENVOYER Vrai FAIRE RENVOYER Faux FIN FIN
-- Baptiste CLOART Freelance b.cloart@blv-tech.com 06.88.74.80.65 www.linkedin.com/in/cloart www.blv-tech.comMessage modifié, 05 décembre 2019 - 14:33 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 324 messages Popularité : +21 (51 votes) |
|
Posté le 05 décembre 2019 - 15:08 |
QUAND EXCEPTIONEXCEPTION DANS MonVariant est un variant = JSONVersVariant(monjson.json) FAIRE Erreur("Json invalide") FIN
Aucune erreur à propagé, pas d'exception à "réactiver" ect, le code plus simple |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 257 messages Popularité : +35 (37 votes) |
|
Posté le 05 décembre 2019 - 16:07 |
Poncherello a écrit :
QUAND EXCEPTION DANS MonVariant est un variant = JsonVersVariant(monjson.json) FAIRE Erreur("Json invalide") FIN
Aucune erreur à propagé, pas d'exception à "réactiver" ect, le code plus simple
Désolé mais votre code ne fonctionne pas. Cela retour toujours faux meme avec un JSON valide
-- Baptiste CLOART Freelance b.cloart@blv-tech.com 06.88.74.80.65 www.linkedin.com/in/cloart www.blv-tech.com |
| |
| |
| | | |
|
| | |