Aller au contenu

catch from json variable


Messages recommandés

Posté(e)

bonjour,

 

j'ai réussi à variabiliser un json :

 

Api : {"tempo_like_calendars":{"start_date":"2023-02-11T00:00:00+01:00","end_date":"2023-02-12T00:00:00+01:00","values":[{"start_date":"2023-02-11T00:00:00+01:00","end_date":"2023-02-12T00:00:00+01:00","value":"WHITE","updated_date":"2023-02-10T10:20:00+01:00"}]}}

 

Comment récupérer WHITE de ce json afin de pouvoir le mettre en variable?

 

Par avance merci de votre astuce

Posté(e)

Salut,

 

local My_Json = '{"tempo_like_calendars":{"start_date":"2023-02-11T00:00:00+01:00","end_date":"2023-02-12T00:00:00+01:00","values":[{"start_date":"2023-02-11T00:00:00+01:00","end_date":"2023-02-12T00:00:00+01:00","value":"WHITE","updated_date":"2023-02-10T10:20:00+01:00"}]}}'

print(My_Json)

mavariable  = json.decode(My_Json)["tempo_like_calendars"]["values"][1].value


print(mavariable)
[12.02.2023] [06:47:48] [DEBUG] [SCENE179]: WHITE

Capture.JPG.a43828da11064bfe2dc430966ac73b50.JPG

 

 

 

Posté(e)

Hello @Bloug ,

 

merci beaucoup c'est parfait, le secret était dans les [] car moi je mettais des () et effectivement ca change tout.

 

Encore merci pour ton support et entraide. Je dois bien avouer que ce forum est une mine d'or et on y croise vraiment des experts dévoués.

Je l'utilise depuis des années pour toutes les informations utiles que l'on peut y trouver et il est vrai que même, si je poste rarement, sans lui j'aurai sans doute abandonné Fibaro (surtout depuis la HC3 qui est quand même plus puissante mais aussi par conséquence plus complexe que la HC2).

Cependant je m'accroche et grâce à vous tous, je progresse et persiste.

 

PS : mine de rien dans ta réponse précédente j'ai vu que tu as utilisé un json viewer qui m'aurait bien été utile et je viens de le trouver "Online JSON Viewer (stack.hu)". Je garde ce lien précieusement pour l'avenir

Posté(e)

j'utilise une extension sur mon browser, qui fait ce job dès qu'il détecte un json (j'n avais presqu'oublié que le json était une TRES longue ligne illisible...)

Posté(e) (modifié)

Désolé :(, mais c'est inexact :

{"name":"Fibaro"}

est un json valide qui ne commence pas par [ et ne se termine pas par ], par contre les accolades encadrantes sont obligatoires...

 

Mais on peut très bien avoir un json avec un format tel que :

[
	{
		"name": "Le premier"
	},
	{
		"name": "Le second"
	}
]

Pour approfondir https://www.w3schools.com/js/js_json_intro.asp

 

Modifié par Barelle
  • Like 1
  • 3 mois après...
Posté(e)

Hello, j'ai une question sur un item similaire.

J'essaie de récupérer la valeur surlignée de ce json, mais impossible...

image.png.c7170cc927b98dbfd65ccd9533303b1c.png

 

 

json.decode(apiResult)["production"]["1"]["wNow"].value
image.png.81961819efcff1dbf98857239bd184bf.png
 
est-ce qu'il y a un truc que je fais mal ?
 
Merci

 

 

Posté(e)

Au lieu de ["1"], utilise [2] car c'est le 2nd élément du tableau indexé (en LUA les index numériques commencent à 0... contrairement à beaucoup d'autres langages de programmation)

 

Dans l'absolu, ça serait plus propre de parcourir les éléments du tableau pour identifier celui qui concerne la production, car rien ne garanti qu'il sera toujours à l'index 2, cela peut être interverti avec les inverters.

Exemple (la variable response contient le tableau JSON décodé) :

for _, v in ipairs(response) do
	if type(v.measurementType) == "string" and v.measurementType == "production" then
		-- Traitement...
	end
end

 

Posté(e) (modifié)

Tu l'aura compris, ca vient de l'envoy, j'usqu'a présent je tapais une url qui donne les données toutes les 15-20min (c'est le refresh de l'application standard), http://192.168.xx.xx/api/v1/production

{
  "wattHoursToday": 28746,
  "wattHoursSevenDays": 167325,
  "wattHoursLifetime": 10990026,
  "wattsNow": 1081
}
Je faisais jsonTable.wattsNow et j'avais ma valeur...


Avec cette url http://192.168.xx.xx/production.json on a tout en live mais je dois me rendre à l'évidence, je ne maitrise pas du tout le Json et les Tableau en lua :D

 

Mes données brutes :

{"production":[{"type":"inverters","activeCount":20,"readingTime":1686585345,"wNow":940,"whLifetime":10842229},{"type":"eim","activeCount":1,"measurementType":"production","readingTime":1686585605,"wNow":904.152,"whLifetime":10990270.929,"varhLeadLifetime":0.321,"varhLagLifetime":4029919.71,"vahLifetime":13766147.664,"rmsCurrent":5.558,"rmsVoltage":232.311,"reactPwr":326.904,"apprntPwr":1291.409,"pwrFactor":0.7,"whToday":28990.929,"whLastSevenDays":167569.929,"vahToday":32000.664,"varhLeadToday":0.321,"varhLagToday":5996.71}],"consumption":[{"type":"eim","activeCount":1,"measurementType":"total-consumption","readingTime":1686585605,"wNow":320.411,"whLifetime":10655435.769,"varhLeadLifetime":7175815.334,"varhLagLifetime":4030550.413,"vahLifetime":18123409.217,"rmsCurrent":0.359,"rmsVoltage":232.445,"reactPwr":-897.411,"apprntPwr":83.362,"pwrFactor":1.0,"whToday":10083.769,"whLastSevenDays":86172.769,"vahToday":29484.217,"varhLeadToday":11357.334,"varhLagToday":5997.413},{"type":"eim","activeCount":1,"measurementType":"net-consumption","readingTime":1686585605,"wNow":-583.741,"whLifetime":7011859.447,"varhLeadLifetime":7175815.013,"varhLagLifetime":630.703,"vahLifetime":18123409.217,"rmsCurrent":5.199,"rmsVoltage":232.58,"reactPwr":-570.508,"apprntPwr":1210.8,"pwrFactor":-0.47,"whToday":0,"whLastSevenDays":0,"vahToday":0,"varhLeadToday":0,"varhLagToday":0}],"storage":[{"type":"acb","activeCount":0,"readingTime":0,"wNow":0,"whNow":0,"state":"idle"}]}

 

Laser, aurais tu pitié de moi pour récupérer les élément en rouge ?

Merci pour ton aide

 

Modifié par TitiXsi
Posté(e)

J'ai peut-être trouvé ... bon sang, je comprends rien, le tableau devient un objet adressable avec le . ??

local ma_variable_test = json.decode(apiResult)["production"][2].wNow
Posté(e)

Tout ça c'est pareil, après tu choisis l'écriture qui te convient le plus :

local ma_variable_test = json.decode(apiResult).production[2].wNow
local ma_variable_test = json.decode(apiResult).production[2]["wNow"]
local ma_variable_test = json.decode(apiResult)["production"][2].wNow
local ma_variable_test = json.decode(apiResult)["production"][2]["wNow"]

Perso j'aime la simplicité et la lisibilité, je préfère la première syntaxe.

J'évite les crochets autant que possible, avec nos clavier Azerty c'est l'enfer... Dans une précédente vie j'ai eu l'occasion de travailler avec un clavier Qwerty, c'est le bonheur pour programmer ! Toutes les touches sont au bon endroit !!!

Idem pour les accolades, antislash, arobase, etc... toutes ces touches "cachées" derrière la touche Alt-Gr de nos claviers Azerty.

A la place, on a des accents... on n'a pas gagné au change :lol:

 

 

Pour Enphase, tu as toujours l'URL "/production.json" ?

Je croyais qu'elle avait été supprimée, raison pour laquelle je n'ai pas partagé mon QuickApp....

Si ça fonctionne toujours, je vais le partager, ça te fera gagner du temps, et pas qu'à toi.

  • Thanks 1
Posté(e) (modifié)

J'ai créer 5 QA à ce sujet (et je l'ai posté dans QA), il me manquait juste le temps de synchro qui était long et je ne comprenais pas pourquoi, là c'est compris !

Mais si ton code fait la même chose, alors je prendrais surement le tiens que dois être plus propre :D

 

Edit: Pour ce qui concerne les claviers, j'aimais bien celui de Sun, avec les copy past à gauche ... mais depouis linux à mis le copy en surligné seul et le clic roulette pour le past, c'est aussi rapide.

Je te rejoints sur les crochets et accolades, à chaque fois, j'ouvre l'un et ferme l'autre ... Grrr

 

Modifié par TitiXsi
×
×
  • Créer...