Aller au contenu

Messages recommandés

Posté(e)

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 :-)


 
Posté(e)

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).

Posté(e)

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 

Posté(e)

@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 ? 

Posté(e)

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.

Posté(e) (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é par Lazer
Posté(e)

ok, merci, je vais essayer ca, et oui, je retrouve le nombre de variable dans un autre item du json

Posté(e) (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é par Cardane
Posté(e)

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

Posté(e)

@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

 

 

 

 

Posté(e)

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

Posté(e)

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 :-)

Posté(e)

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"])

 

  • Like 1
×
×
  • Créer...