jjacques68 Posté(e) le 4 juin 2017 Signaler Posté(e) le 4 juin 2017 Bonjour tout le monde ! Je bloque sur la compréhension des tables Json {}. Voici une table Json envoyée dans un Label d'un VD de la HC2 (elle contient les données d'un capteur de plante verte) [DEBUG] 10:03:31: MaChaine = {Hum:31,Tmp:20.5,Frt:28,Lum:880,Bat:82} Elle fonctionne très bien et j'arrive a exploiter les données avec simplement ce code dans une scène : for k,v in pairs(json.decode(MaChaine)) do print(k.." "..v) end ce qui me donne : [DEBUG] 10:03:31: Tmp 20.5 [DEBUG] 10:03:31: Lum 880 [DEBUG] 10:03:31: Frt 28 [DEBUG] 10:03:31: Bat 82 [DEBUG] 10:03:31: Hum 31 Nickel !!! Mais si maintenant je veux ajouter également du texte (PAS QUE DES CHIFFRES) pour avoir ça : [DEBUG] 10:08:26: MaChaine = {Tmp:20.5 C,Hum:31 %,Frt:28 uS/cm,Lum:880 Lux,Bat:82 %} J'obtiens maintenant cette erreur : [DEBUG] 10:08:26: line 35: unexpected character @ character: 11 0:11 [C] line: [DEBUG] 10:08:26: {Tmp:20.5 C Donc clairement, il n'accepte pas des caractères autres que numériques pour la table Json !!!??? Donc MaChaine reste une simple string ??!! Vous avez des explications là-dessus ????? PS : je peux contourner le problème avec ce script, mais alors une sacré usine à gaz... MaChaine:gsub("([^,{}]+)", function(valeur) MonTableau[#MonTableau+1]=valeur end) for i= 1, #MonTableau do local MaValeur = {} MonTableau[i]:gsub("([^:]+)", function(valeur) MaValeur[#MaValeur+1]=valeur end) print(MaValeur[1].." "..MaValeur[2]) end qui me donne ce que je voudrai : [DEBUG] 10:15:20: Tmp 20.5 C [DEBUG] 10:15:20: Hum 31 % [DEBUG] 10:15:20: Frt 28 uS/cm [DEBUG] 10:15:20: Lum 880 Lux [DEBUG] 10:15:20: Bat 82 % mais pffffffffffff....
ADN182 Posté(e) le 4 juin 2017 Signaler Posté(e) le 4 juin 2017 Salut, je pense que dans ton cas le mieux c'est de ne pas passer par une boucle mais directement en récupérant les valeurs alors je connais pas la syntaxe exacte mais quelques choses dans ce goût là "Ma chaîne [1]" sachant que ma chaîne c'est le json.decode de ton JsonAprès tu enchaînes sur ta phares Il fait Ma chaîne [1] °C et Ma chaîne [2] humidité dans le salonEnvoyé de mon Nexus 5X en utilisant Tapatalk
Lazer Posté(e) le 4 juin 2017 Signaler Posté(e) le 4 juin 2017 Ta variable machaine ne contient que des valeurs numériques, car il n'y a pas de double quotes ( " ) autour des valeurs pour que ça soit des strings. Ton problème vient peut être de là 1
jjacques68 Posté(e) le 4 juin 2017 Auteur Signaler Posté(e) le 4 juin 2017 (modifié) Pour les double " j'ai essayé, et la requête ne s'execute pas correctement du coup... la requete est conçue de cette manière : http://192.168.x.y/api/callAction?deviceID=353&name=setProperty&arg1=ui.FromJeedom.value&arg2= { Tmp:#[Maison][Palmier][Température]# C, Hum:#[Maison][Palmier][Humidité]# %25, Frt:#[Maison][Palmier][Fertilisant]# uS/cm, Lum:#[Maison][Palmier][Luminosité]# Lux, Bat:#[Maison][Palmier][Batterie]# %25 } le %25 = % sinon ça plante aussi. J'ai essayé de remplacer les espaces par %20 mais change rien. dès que je mets un caractère derrière le # à part la virgule ça plante. Modifié le 4 juin 2017 par jjacques68
Lazer Posté(e) le 4 juin 2017 Signaler Posté(e) le 4 juin 2017 hum ah oui c'est vrai ça vient de Jeedom, je sais pas trop comment ça fonctionne du coup....
Lazer Posté(e) le 4 juin 2017 Signaler Posté(e) le 4 juin 2017 Tiens, il se trouve que je suis en train de bosser sur une récupération d'une table JSON sur le Web, regarde à quoi ça ressemble ce que je récupère, ça te donnera une idée de comment tu dois configurer Jeedom pour créer une chaine propre contenant ton JSON : "{\"country\":\"France\",\"countryCode\":\"FR\",\"isp\":\"Free SAS\",\"org\":\"Free SAS\",\"query\":\"0.0.0.0\",\"region\":\"IDF\",\"regionName\":\"Île-de-France\",\"status\":\"success\",\"timezone\":\"Europe\/Paris\"}" Note : Les anti-slashs sont là pour protéger les doubles-quotes à l'intérieur de la chaine, elle-même contenue dans des doubles-quotes 1
jjacques68 Posté(e) le 4 juin 2017 Auteur Signaler Posté(e) le 4 juin 2017 A HA !!! je regarde merci !
jjacques68 Posté(e) le 4 juin 2017 Auteur Signaler Posté(e) le 4 juin 2017 (modifié) pffffffffffffffffffff je suis un boulet !!!!!! tu m'avais dis d'essayé avec les doubles ", mais j'avais essayé avec des simples ' !!!!! Du coup ça fonctionne avec les double " (marche pas avec \") donc voici la requête : http://192.168.x.y/api/callAction?deviceID=353&name=setProperty&arg1=ui.FromJeedom.value&arg2= { Tmp:"#[Maison][Palmier][Température]# °C", Hum:"#[Maison][Palmier][Humidité]# %25", Frt:"#[Maison][Palmier][Fertilisant]# uS/cm", Lum:"#[Maison][Palmier][Luminosité]# Lux", Bat:"#[Maison][Palmier][Batterie]# %25" } au moins 4 heures passée là-dessus.... MERCI @Lazer!!!! Modifié le 4 juin 2017 par jjacques68 2
pepite Posté(e) le 4 juin 2017 Signaler Posté(e) le 4 juin 2017 Ah coool donc tu peux mettre le ddbug et le json decode que tu utilises alors :-) .@jjacques68, j'aurais pas pense aux guillemets" :-)Envoyé de mon Nexus 5X en utilisant Tapatalk 1
Messages recommandés