Cardane Posté(e) le 4 août 2019 Signaler Posté(e) le 4 août 2019 Bonjour, J'ai un problème avec la lecture d'un Json en retour d'un http:get le json de retour est : {"Command": "ACTIVATE_SCENE", "result": "SUCCESS"} fibaro:debug("Result : ", response.result) fibaro:debug("COMMAND : ", response.Command) if response.result == "SUCCESS" then fibaro:debug ("SUCCESS") les deux fibaro:debug n'affiche ni response.result ni response.command, par contre le test suivant fonctionne bien donc response.result est bien égal à SUCCESS je suis pas bien réveillé, mais je ne comprends plus :-)
Lazer Posté(e) le 4 août 2019 Signaler Posté(e) le 4 août 2019 Petite erreur de syntaxe. Dans dans tes fibaro:debug(), remplace la virgule par 2 points consécutifs. Car là, au lieu de concaténer les chaînes de caractères, tu passes ta variable en second argument de la fonction (qu'elle ignore totalement).
Cardane Posté(e) le 4 août 2019 Auteur Signaler Posté(e) le 4 août 2019 bon, ok, suis vraiment pas réveillé :-) 3 heures à mélanger du lua, du python et du php, j'ai plus les yeux en face des trous :-) merci @Lazer, je vais pouvoir finir mes VD aujourd'hui
Cardane Posté(e) le 4 août 2019 Auteur Signaler Posté(e) le 4 août 2019 @Lazer, encore une petite question de codage... dans un autre json, j'ai {"Type0": "xxxxxxxx", "Type1": "yyyyyyy", "Type2": "zzzzzzzz"} je voudrais interroger ca dans un boucle avec un truc du genre response.Type, mais comment je pourrais faire pour avoir response.Type0, puis response.Type1, etc.... construire le Type0, Type1 dans une variable, je sais, mais après, comment l'utiliser ?
Cardane Posté(e) le 4 août 2019 Auteur Signaler Posté(e) le 4 août 2019 salut @Nico, toujours sur mes VD pour piloter complètement le KLF200. Ca commence à marcher correctement, en utilisant les vraies commandes qui permettent d'actionner n'importe quel device. Dès que c'est fini (d'ici peu) je ferai un tuto, parce que ca me semble intéressant pour toutes les personnes qui ont du IO/HomeControl chez eux.
Lazer Posté(e) le 4 août 2019 Signaler Posté(e) le 4 août 2019 (modifié) Un truc dans le genre (pas testé) : local i = 1 fibaro:debug(response["Type"..i]) En partant du principe que tu connais à l'avance les noms + numéros des variables de ton tableau. Sinon il faudrait parcourir la table à l'aide du boucle for... pairs() Modifié le 4 août 2019 par Lazer
Cardane Posté(e) le 4 août 2019 Auteur Signaler Posté(e) le 4 août 2019 ok, merci, je vais essayer ca, et oui, je retrouve le nombre de variable dans un autre item du json
Cardane Posté(e) le 4 août 2019 Auteur Signaler Posté(e) le 4 août 2019 (modifié) bon, ca n'a pas l'air de fonctionner, j'ai essayé avec différentes variantes fibaro:debug(response{"Type"..i]) fibaro:debug(response.{"Type"..i}) fibaro:debug(response.["Type"..i]) mais j'ai une erreur à chaque fois Modifié le 4 août 2019 par Cardane
Lazer Posté(e) le 4 août 2019 Signaler Posté(e) le 4 août 2019 C'est quoi ton erreur ? Edit il me semble que la "bonne" variante, c'est celle que tu n'as pas mis : c'est à dire les crochets, sans le point EDIT 2 : en effet, le code que j'ai donne page précédente est faux, il y a une accolade à la place du crochet, je vais modifier
mprinfo Posté(e) le 5 août 2019 Signaler Posté(e) le 5 août 2019 @lazer il te manque un point entre réponse et [ il me semble si mes souvenirs sont bons print("start") local reponse = { ["local1"] = "toto1", ["local2"] = "toto2", ["local3"] = "toto3", } -- recherche sur local2 print (reponse.local2) Envoyé de mon BLA-L29 en utilisant Tapatalk
Lazer Posté(e) le 5 août 2019 Signaler Posté(e) le 5 août 2019 non mais là tu montres juste la déclaration de la table, ce n'est pas le souci, Cardane a déjà sa table puisque c'est ce qu'il récupère. relis bien la discussion. Pour en extraire l'info, je pense qu'il faut faire quelque chose comme ça, exemple, toujours non testé : local i = 1 fibaro:debug(response["Type"..i]) Je pense que la syntaxe devrait être OK avec les crochets et le double point pour concaténer le nom du paramètre
Cardane Posté(e) le 5 août 2019 Auteur Signaler Posté(e) le 5 août 2019 je confirme, je viens d'essayer comme ça, (comme tu disais la seule variante que je n'avais pas essayé :-) ) et ca marche super, merci beaucoup du coup de main , même si un peu comme le disait @mprinfo je ne pige pas bien pourquoi il ne faut pas de point après 'response' , mais bon, ca fonctionne, c'est le principal :-)
Lazer Posté(e) le 5 août 2019 Signaler Posté(e) le 5 août 2019 C'est la syntaxe LUA qui est ainsi faite. Tu mets le point si tu le fait suivre directement par le nom du paramètre Sinon, si tu utilises les crochets, alors il ne faut pas mettre le point. Dans ton cas à toi, tu as besoin des crochets, car tu veux utiliser une variable qui contient le nom du paramètre, ce qui ne serait pas possible avec la syntaxe contenant juste le point. En complément d'infos, dans l'exemple de mprinfo, ces 2 lignes sont identiques, mais la 2nde est beaucoup trop lourde à écrire et à lire, donc on préfère la première : print (reponse.local2) print (reponse["local2"]) 1
Cardane Posté(e) le 5 août 2019 Auteur Signaler Posté(e) le 5 août 2019 ok, merci, j'aurai encore appris un truc en lua ce matin :-)
Messages recommandés