chrisalex Posté(e) le 12 février 2023 Signaler Partager Posté(e) le 12 février 2023 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Bloug Posté(e) le 12 février 2023 Signaler Partager Posté(e) le 12 février 2023 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
chrisalex Posté(e) le 12 février 2023 Auteur Signaler Partager Posté(e) le 12 février 2023 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
jojo Posté(e) le 12 février 2023 Signaler Partager Posté(e) le 12 février 2023 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...) Lien vers le commentaire Partager sur d’autres sites More sharing options...
mprinfo Posté(e) le 12 février 2023 Signaler Partager Posté(e) le 12 février 2023 Un json commence toujours par [ et ce termine toujours par ] Envoyé de mon BLA-L29 en utilisant Tapatalk Lien vers le commentaire Partager sur d’autres sites More sharing options...
Barelle Posté(e) le 12 février 2023 Signaler Partager Posté(e) le 12 février 2023 (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é le 12 février 2023 par Barelle 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
TitiXsi Posté(e) le 12 juin 2023 Signaler Partager Posté(e) le 12 juin 2023 Hello, j'ai une question sur un item similaire. J'essaie de récupérer la valeur surlignée de ce json, mais impossible... json.decode(apiResult)["production"]["1"]["wNow"].value est-ce qu'il y a un truc que je fais mal ? Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lazer Posté(e) le 12 juin 2023 Signaler Partager Posté(e) le 12 juin 2023 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
TitiXsi Posté(e) le 12 juin 2023 Signaler Partager Posté(e) le 12 juin 2023 Merci Lazer, je pensais que "1" etait la key de l'élément suivant, je vais essayer Lien vers le commentaire Partager sur d’autres sites More sharing options...
TitiXsi Posté(e) le 12 juin 2023 Signaler Partager Posté(e) le 12 juin 2023 (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 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é le 12 juin 2023 par TitiXsi Lien vers le commentaire Partager sur d’autres sites More sharing options...
TitiXsi Posté(e) le 12 juin 2023 Signaler Partager Posté(e) le 12 juin 2023 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lazer Posté(e) le 12 juin 2023 Signaler Partager Posté(e) le 12 juin 2023 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 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. 1 Lien vers le commentaire Partager sur d’autres sites More sharing options...
TitiXsi Posté(e) le 12 juin 2023 Signaler Partager Posté(e) le 12 juin 2023 (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 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é le 12 juin 2023 par TitiXsi Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés