Aller au contenu
jjacques68

Question Contenu Table Json

Recommended Posts

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... :13:

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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 Json

Après tu enchaînes sur ta phares

Il fait Ma chaîne [1] °C et Ma chaîne [2] humidité dans le salon

Envoyé de mon Nexus 5X en utilisant Tapatalk


Partager ce message


Lien à poster
Partager sur d’autres sites

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à

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par jjacques68

Partager ce message


Lien à poster
Partager sur d’autres sites

hum ah oui c'est vrai ça vient de Jeedom, je sais pas trop comment ça fonctionne du coup....

Partager ce message


Lien à poster
Partager sur d’autres sites

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

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par jjacques68
  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

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

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

×