[Résolu] Fichier JSON en externe, conversion en variable

Bonjour, j’espère que je vais réussir à vous décrire le problème que je rencontre.

Avec l’aide de Entropy sur Discord, il en a conclu qu’il y avait un bug pour la conversion d’un json lors d’un requête web.

Je vous explique ce que j’ai fait :

J’ai sur mon serveur ftp, envoyé mes fichiers JSON (des listes de mots suivant un thème). Je lance donc une requête web pour récupérer le contenu de l’une de ces listes, en faisant pointer l’url directement sur le fichier (exemple : https://www.domaine.fr/json/fichier.json).

Je stock le résultat dans une variable, et avec le débogueur, je vois bien la liste s’afficher dans celle ci.

Suite à un conseil de Gruk, je décode ensuite la chaine json obtenue et la stock dans une nouvelle variable pour pouvoir exploiter la liste (pour obtenir un mot aléatoire et avoir son nombre de caractère).

Mais c’est là qu’est le problème, la variable reste à 0 alors que normalement, elle devrait avoir comme valeur le nombre de caractère que possède le mot tiré au hasard.

Je ne sais pas comment vous décrire mieux que ça, voici deux captures d’écran, une avant le choix du thème (donc pas de liste de mot encore trouvé) et une où on voit bien la liste obtenue directement depuis le fichier stocké sur mon serveur, et on y voit bien tout en bas la position “17” suivi de “0” (qui aurait du être “3” (pour “SKI”).


Et voici une partie des évènements qui sont en lien avec la requête :

Le premier, où j’envoie la requête et je décode la chaine json :

Et le second, où j’exploite les résultats afin de créer des underscores en fonction du nombre de lettre :

Il faut savoir que j’ai essayé plusieurs façon différente de procéder, de changer l’emplacement du fichier json sur le serveur, de tenter différentes url, etc.
Et que, en local, avec les options de fichier systèmes (pour Mac Windows et Linux), ça fonctionne très bien. Le problème n’est là que quand je tente une requête web.

Je peux si vous le souhaiter vous fournir l’intégralité du projet si ça peut vous aider à y voir plus clair.

Si jamais vous estimez que c’est un bug, alors je patienterai jusqu’à ce que ce soit corrigé, mais si c’est moi “le bug” (ce qui est fort probable aussi :joy: ) et que finalement il y a quelque chose que je fais de mal, alors je vous remercie par avance de m’aider à trouver la solution !

Merci à vous :slight_smile:

Ce sont tes évènements qui ne sont pas bons, je viens d’essayer.
Change ta condition par :
texte de variable de scene jsonObjet =/= ‘’ "


Salut Gruk, merci pour ta réponse.

Je crois avoir fait ce que tu m’as dit, mais j’ai toujours le même problème, voici les captures :

La partie où je fais la requête puis le décodage du json pour stocker dans une variable :

La partie où j’utilise cette variable pour créer des underscores en fonction du nombre de caractère du mot tiré au hasard :

Et voici la console du debogueur, j’ai bien ma liste de mot dans “jsonObjet”, mais “MotCache” est à 0 car dans “motJson” j’ai aussi 0, alors que le mot tiré au hasard est le 5, donc “TROTINETTE” (erreur d’orthographe au passage, je vais corriger ça ^^), donc 10 caractères.

Moi ce que je vois déjà c’est le mauvais type de valeur.

Quand il y a des apostrophes la valeur est du texte.
Toi tu cherche à avoir le nombre de lettre dans le mot, cela sous forme de chiffre numérique, pas de texte.
C’est déjà une étape. Vérifie les types de tes variables, les actions qui les gère, et tes expression si tu converti avec tonumber ou tostring.

Le problème est ta condition pour vérifier que le json a été téléchargé. La valeur par défaut d’une variable est “0”, et non pas “” :wink:

J’y comprends de moins en moins, c’est pas bon signe ça ! :sweat_smile::joy:

Gruk m’a conseillé de mettre : texte de variable de scène jsonObjet = / = ‘’ ".
Arthuro me conseille de mettre “0” et non " ".

Ou est-ce que vous ne parlez pas de la même chose ?

Et pour la réponse de Bouh, je crois comprendre, il faut différencier les chaines de caractère et les valeurs numériques.
Mais ce que je récupère dans le json, c’est toute une chaine, toute une liste de mot. Ils sont tous positionné de 1 à 20, je demande un random de 1 à 20 pour choisir le mot, et on voit que la position sort bien (on peut voir le numéro 17 par exemple sur le screen). On voit bien d’ailleurs les accolades { et } dans la variable motJson.

Mais alors, pourquoi dans cet exemple, le “17” est en blanc, il fonctionne bien il est bien trouvé, alors que le mot qui lui aussi est entre " " est en orange et ne s’affiche pas ?

Quand tu essaies d’utiliser une variable non existente, elle est créé et la valeur 0 est mise dedans par défaut. Vu que tu n’attends pas le téléchargement du json pour essayer de le convertir en structure, au moment où la sélection du numéro Random est fait, tu essaie d’accéder à une variable non existente et elle est initialisée à 0.

C’est pour ça que vérifier si la variable est égale a “0” est nécessaire, car tant qu’elle est a 0, ça vaut dire que le téléchargement n’est pas terminé et que du coup le json n’est pas encore dans la variable.

Dans certains examples, peut être que ça marchait car avant l’événement de téléchargement était synchrone: le jeu se bloquait le temps de télécharger le json et du coup tu pouvais directement transformer le json en variable, vu que les évènements ne pouvaient continuer qu’après que le téléchargement soit terminé. Mais maintenant, c’est asynchrone : le téléchargement se fait en arrière plan et le jeu (et les évènements) continue en parallèle.

Je vois ce que tu veux dire. Donc je dois faire en sorte de verifier si ça a bien chargé, j’ai tenté ça :

Vérifier si le texte et même la valeur est différente de 0, j’ai même mi un chrono pour avoir un laps de temps :

Mais rien à faire, toujours pareil :

Y’a forcément quelque chose que je fais de travers si vous pensez que ce n’est pas un bug, mais honnêtement, je n’arrive pas à comprendre…

C’était bien une question de position et de temps pour faire charger la requête et la décoder, merci à vous et à Entropy :wink:

1 Like