Forums - La Blocothèque - Créer et manipuler des listes avec fromJson

Mots-clés : 

Ce sujet a 2 réponses, 2 participants et a été mis à jour par   Jean-Louis Girard, il y a 11 mois et 3 semaines. This post has been viewed 388 times

  • Jean-Louis Girard  | Posté le 30 octobre 2019 à 11 h 36 min

    Bonjour à tous,
    manipuler des listes de nombres peut être intéressant :
    par exemple
    liste1<-createList()
    liste1<-fromJson(“[3,2,1]”)
    permet de créer une liste de 3 nombres que l’on peut interroger avec get().

    Mais cette syntaxe ne fonctionne pas avec des mots.

    Quelqu’un aurait-il la solution pour créer des listes de plusieurs mots et interroger cette liste ensuite ?

    Belle journée.
    JL

    Yannick Audéoud  | Posté le 30 octobre 2019 à 17 h 02 min

    Bonjour,

    Méthode alternative au JSON
    Vous tentez ici d’écrire un texte au format JSON définissant une liste de textes, de manière à le convertir ensuite en une liste.

    Avez-vous une raison particulière de vouloir faire cela, ou est-ce que votre but réel est juste de créer une liste qui contient des textes, quelle que soit la méthode utilisée ?

    En effet, le format JSON est censé servir principalement lors d’échanges avec des services qui imposent l’utilisation de ce format. Cela peut être le cas lors par exemple lors de l’utilisation d’un bloc Requête Web pour dialoguer avec un service web tiers. La réponse de la requête pourra être au format JSON, et la fonction fromJson sera donc très utile pour exploiter cette réponse dans VTS Editor avec les variables.

    Si votre but est uniquement de créer une liste qui contient des textes, voici une méthode plus simple et plus lisible :
    variables

    La fonction add ajoute une valeur à la fin d’une liste, et ne retourne aucun résultat.

    Précision : pour obtenir des lignes comme les 3 dernières, avec uniquement un champ texte, il faut cliquer sur la petite flèche entre les deux champ texte. Ce n’est pas obligatoire, mais cela rend la ligne plus claire, car en effet la fonction add fait partie des fonctions qui ne retournent aucun résultat, et donc qui ne permettent pas de donner une valeur à une variable.

    Ici, on a donc créé une liste qui contient 3 textes : Paris, Berlin et Tokyo.

    Réponse à votre question initiale
    Je réponds dans cette section au cas où vous souhaiteriez malgré tout utiliser la méthode fromJson pour créer votre liste (quelle que soit la raison).

    Vous êtes ici face à un cas assez subtil. En effet :
    – Tous les textes dans les variables doivent être entourés de guillemets, qui marquent donc le début et la fin du texte.
    – Un texte au format JSON est lui-même un texte, entouré par des guillements.
    – Pour créer une liste JSON contenant des textes, on a donc des textes inclus dans des textes.

    On pourrait songer à inclure un texte dans un texte de la manière suivante :
    variables
    Sauf qu’en réalité, le 2e guillemet est reconnu comme étant le marqueur de fin du texte « Un  » (incluant un espace), et non pas comme le début du texte « texte » inclu dans le premier texte. Cela fait donc une erreur.

    Il existe une solution : pour inclure des guillemets dans un texte, pas en tant que marqueur de fin du texte, mais comme faisant partie du texte en lui-même, il faut ajouter un antislash (\) devant le guillemet, comme ceci :
    variable

    Ainsi, on peut donc remplir une liste JSON avec des textes comme ceci :
    variables

    Voici ce que ça donne si j’affiche cette liste dans un bloc Message en faisant {liste} dans le contenu du bloc :
    message

    J’obtiens donc bien une liste contenant des textes.

    Une dernière remarque
    La fonction fromJson créé une nouvelle liste, donc la première ligne de votre exemple (createList) n’est pas utile car elle créé une liste qui est remplacée juste après par le fromJson.

    Cordialement,
    Yannick

    Jean-Louis Girard  | Posté le 4 novembre 2019 à 13 h 40 min

    Bonjour Yannick, et merci beaucoup : c’est très clair et mis en application avec succès !

    Je passe par Json parce que je que travaille sur des listes qui définissent les énoncés d’un exercice et que chacune est un peu longue pour être rentrée à la main (plus de 150 éléments par liste). J’établis ces listes par une macro xls, je colle le résultat dans une fonction Json (un seul copier/coller par énoncé, et c’est tout). En revanche, les éléments de ces listes permettent ensuite de créer d’autres listes dans VTS Editor, ce qui est automatisé par add ou set, et qui déterminent les paramètres (largeurs, hauteurs, positions verticales et horizontales, couleur avant et après clic, etc.) d’autant de zones cliquables qu’il y a d’éléments dans la liste. Grâce à vos explications, cela marche super-bien et le résultat est très satisfaisant et fluide, avec 5 mn de paramétrage pour un énoncé qui gère plus de 150 zones cliquables, 1 heure pour 12 énoncés !
    Encore merci et bonne journée.
    JL