Page 1 sur 1

lua et json

Publié : 07 mai 2017, 23:02
par papoo
bonjour,
dans un script lua, j'extrais des données d'une API via JSON. jusqu'ici pas de problème.
cette API a une particularité : lorsque des données sont absentes le champs dédié disparaît et du coup mon script est en erreur jusqu’à ce que ce champs réapparaisse.
exemple avec le tutoriel https://easydomoticz.com/lua-et-json/
si le champs

Code : Tout sélectionner

"latitude": "37.77500916",
disparait de l'API
le code si référant

Code : Tout sélectionner

latitude = jsonLocation.current_observation.display_location.latitude
retourne une erreur de type

Code : Tout sélectionner

Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_test.lua: /home/pi/domoticz/scripts/lua/script_time_test.lua:21: attempt to index field 'latitude' (a nil value)
j'ai bien sur tenté les

Code : Tout sélectionner

if jsonLocation.current_observation.display_location.latitude ~= nil then 
ou

Code : Tout sélectionner

latitude = jsonLocation.current_observation.display_location.latitude or nil
ou

Code : Tout sélectionner

latitude = jsonLocation.current_observation.display_location.latitude or ""
tout cela sans succès
Auriez vous une solution à ce problème?

Re: lua et json

Publié : 08 mai 2017, 09:28
par vil1driver
Salut,

Code : Tout sélectionner

local infos = jsonLocation.current_observation.display_location

for v,i in pairs(infos) do
		if v=='latitude' then
			latitude=i
			break
		else
			latitude='not found'
		end
end
print(latitude)	
;)

Re: lua et json

Publié : 08 mai 2017, 10:46
par papoo
merci

Re: lua et json

Publié : 08 mai 2017, 11:02
par papoo
mince
cela fonctionne si je recherche une valeur mais j'en ai plusieurs
et ça ne me retourne que la dernière (longitude) il ne trouve pas la première (latitude)
local infos = jsonLocation.current_observation.display_location

Code : Tout sélectionner

for v,i in pairs(infos) do
      if v=='latitude' then latitude=i break else latitude='not found' end
      if v=='longitude' then longitude=i break else longitude='not found' end
end
print(latitude) 
print(longitude)  

Re: lua et json

Publié : 08 mai 2017, 11:03
par vil1driver
Normal le break stop la recherche des qu'une valeur est trouvée.

Il te faut dupliquer le bloc complet pour chaque valeur recherchée

Code : Tout sélectionner


local infos = jsonLocation.current_observation.display_location

for v,i in pairs(infos) do
      if v=='latitude' then
         latitude=i
         break
      else
         latitude='not found'
      end
end
for v,i in pairs(infos) do
      if v=='longitude' then
         longitude=i
         break
      else
         longitude='not found'
      end
end
print(latitude)   
print(longitude) 

Ou alors

Code : Tout sélectionner


local infos = jsonLocation.current_observation.display_location
local latitude ='not found'
local longitude ='not found'
for v,i in pairs(infos) do
      if v=='latitude' then
         latitude=i
       end
      if v=='longitude' then
         longitude=i
       end
end
print(latitude)   
print(longitude) 


Re: lua et json

Publié : 08 mai 2017, 12:22
par papoo
merci

Code : Tout sélectionner

local infos = jsonLocation.current_observation.display_location

for v,i in pairs(infos) do
      if v=='latitude' then print(i) end
      if v=='longitude' then print(i) end
end
semble fonctionner
je vais donc tenter de mette à jour mes devices directement dans la boucle for