Page 1 sur 2

Parser du JSON avec lua

Publié : 12 janv. 2018, 14:15
par chatainsim
Bonjour,

J'essaye de parser ce fichier json:

Code : Tout sélectionner

{
  "station": [
    "L800001020",
    "W141001001"
  ],
  "idx": {
    "height": {
      "L800001020": "218",
      "W141001001": "215"
    },
    "speed": {
      "L800001020": "217",
      "W141001001": "216"
    }
  },
  "notifications": {
    "height": {
      "W141001001": {
        "test": "ge",
        "value": "2",
        "active": "true"
      },
      "L800001020": {
        "test": "gt",
        "value": "1",
        "active": "true"
      }
    },
    "speed": {
      "W141001001": {
        "test": "ge",
        "value": "100",
        "active": "true"
      },
      "L800001020": {
        "test": "ge",
        "value": "140",
        "active": "true"
      }
    }
  }
}
Avec ce code (morceau du script) :

Code : Tout sélectionner

    local file = assert(io.open(config, "r"))
    local json_text = file:read("*all")
    file:close()
    local Conf = json:decode(json_text)
    Station = Conf.station
for k,v in pairs(Station) do
        local IDStation = v
        local IDXHeight = Conf.idx.height.v
        local IDXSpeed = Conf.idx.speed.v
        local NotifHeightV = Conf.notifications.height.v.value
        [...]
Mais par exemple pour récupérer la valeur de la variable IDXHeight, j'utilise Conf.idx.height.v mais le v n'est pas remplacer par sa valeur.
Pareil pour NotifHeightV = Conf.notifications.height.v.value.

Comment forcer lua a remplacer v par sa valeur ?

Merci

Re: Parser du JSON avec lua

Publié : 12 janv. 2018, 14:39
par vil1driver
Salut,

Et en remplaçant

Code : Tout sélectionner

for k,v in pairs(Station) do
Par

Code : Tout sélectionner

for k,v in pairs(Conf.idx.heigh) do

Re: Parser du JSON avec lua

Publié : 12 janv. 2018, 14:42
par chatainsim
vil1driver a écrit :Salut,

Et en suppriment

Code : Tout sélectionner

for k,v in pairs(Station) do
Et v qui n'existe pas par le bon terme ex:

Code : Tout sélectionner

L800001020
?
C'est ma boucle pour parcourir les ID stations.
Du coup je ne peux pas le supprimer, c'est même elle qui assigne les valeurs à la variable v

Re: Parser du JSON avec lua

Publié : 12 janv. 2018, 14:45
par vil1driver
J'ai edité mon message pdt que tu écrivais

Des print...

Affiche k et v dans ta boucle pour comprendre

Re: Parser du JSON avec lua

Publié : 12 janv. 2018, 14:50
par chatainsim
vil1driver a écrit :J'ai edité mon message pdt que tu écrivais

Des print...

Affiche k et v dans ta boucle pour comprendre
La variable v est bien assigné, c'est simplement quand je parse le json avec

Code : Tout sélectionner

local IDXHeight = Conf.idx.height.v 
ou

Code : Tout sélectionner

local NotifHeightV = Conf.notifications.height.v.value
Il faudrait qu'il remplace v par sa valeur assigné, par exemple avec la station L800001020:

Code : Tout sélectionner

local IDXHeight = Conf.idx.height.L800001020
local NotifHeightV = Conf.notifications.height.L800001020.value
Mais il ne considère pas v comme étant une variable dans ce cas là.

Re: Parser du JSON avec lua

Publié : 12 janv. 2018, 15:15
par vil1driver
si tu ne parcours que Station, tu ne peux pas avoir les info des autres...
il te faut parcourir idx pour lire son contenu

Code : Tout sélectionner

for k,v in pairs(Conf.idx.height) do
	print(k..':'..v)

end

Re: Parser du JSON avec lua

Publié : 12 janv. 2018, 15:53
par chatainsim
vil1driver a écrit :si tu ne parcours que Station, tu ne peux pas avoir les info des autres...
il te faut parcourir idx pour lire son contenu

Code : Tout sélectionner

for k,v in pairs(Conf.idx.height) do
	print(k..':'..v)

end
Sauf que j'utilise la boucle for car Station est un tableau et idx n'en ai pas un.
C'est pour cela que j'essaye d'accéder directement aux valeurs avec la variable v.

Re: Parser du JSON avec lua

Publié : 12 janv. 2018, 16:03
par vil1driver
si idx est un tableau.. contient des ensembles clés/valeurs, valeurs qui à leur tour sont des tableaux..

Code : Tout sélectionner

print(typeof(Conf.idx))
print(table_show(Conf.idx, "Conf.idx"))  
for k,v in pairs(Conf.idx.height) do
	print(k..':'..v)

end
renvoi :
table
Conf.idx = {
["height"] = {
["W141001001"] = "215";
["L800001020"] = "218";
};
["speed"] = {
["W141001001"] = "216";
["L800001020"] = "217";
};
};
W141001001:215
L800001020:218
je ne vois pas ce que tu veux de plus...

Re: Parser du JSON avec lua

Publié : 12 janv. 2018, 16:18
par chatainsim
vil1driver a écrit :si idx est un tableau.. contient des ensembles clés/valeurs, valeurs qui à leur tour sont des tableaux..

Code : Tout sélectionner

print(typeof(Conf.idx))
print(table_show(Conf.idx, "Conf.idx"))  
for k,v in pairs(Conf.idx.height) do
	print(k..':'..v)

end
renvoi :
table
Conf.idx = {
["height"] = {
["W141001001"] = "215";
["L800001020"] = "218";
};
["speed"] = {
["W141001001"] = "216";
["L800001020"] = "217";
};
};
W141001001:215
L800001020:218
je ne vois pas ce que tu veux de plus...
Accéder directement à la valeur qui correspond à Conf -> idx -> height -> L800001020
Sans faire une boucle.

Car je récupère un ID de station puis les IDX lié à cet ID de station et les infos de notifications liè puis passer à l'ID de la station suivante etc ...

Mais peut être que je me complique la vie.

Re: Parser du JSON avec lua

Publié : 12 janv. 2018, 16:53
par vil1driver

Code : Tout sélectionner

for k,v in pairs(Station) do
        local IDStation = v
        local IDXHeight = Conf.idx.height[v]
        local IDXSpeed = Conf.idx.speed[v]
        local NotifHeightV = Conf.notifications.height[v].value
	print('station: '..IDStation..' height: '..IDXHeight..' speed: '..IDXSpeed..' NotifHeightV: '..NotifHeightV)
end