Aller au contenu
Cardane

problème de lecture d'un Json

Recommended Posts

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


 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Et tu prépares quoi comme VD ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

@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

 

 

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

ok, merci, j'aurai encore appris un truc en lua ce matin :-)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

×