[javascript] json data selcteren adhv variabele

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Maverick
  • Registratie: Oktober 2001
  • Laatst online: 08:25
Excuses voor de onduidelijke titel. Weet niet zo goed hoe ik dit moet beschrijven. Tevens is dit de eerste keer dat ik iets met javascript doe, dus bear with me :)

Ik heb een script dat json data ontvangt en hiermee een webpagina vult (voor de geintereseerden, ik wil data vanuit Domoticz op mijn magic mirror plaatsen).
Nu werkt dat allemaal prima. Maar ik wil iets doen waarvan ik niet weet hoe.

Ik heb het volgende:
JavaScript:
1
2
3
4
5
6
7
8
9
        for (var c in this.sensors) {
            var sensor = this.sensors[c];
            if(sensor.idx == data.result[0].idx){
                this.sensors[c].sname = data.result[0].Name;
                this.sensors[c].status = data.result[0].Data;
                this.sensors[c].data2 = data.result[0].Usage;
                this.sensors[c].type = data.result[0].Type;
            }
        }


De rechterzijde is de json data, en links kan ik er wat mee. Nu wil ik eigenlijk bijvoorbeeld data.result[0].Usage kunnen veranderen adhv een variabele. Ik heb er een, laat ik hem sensor.var1 noemen en die is gelijk aan "Usage". Nu wilde ik eerst data.result[0].sensor.var1 doen, maar dit werkt niet. Volgens mij omdat het een list(?) is en dat geen item in die list is.

Ik heb nu zelf geen idee hoe ik in die list op zoek kan gaan naar het item dat gelijk is aan de naam van mijn variabele zodat ik de waarde eruit kan halen. Is er iemand die mij in de juiste richting kan duwen?

PSN: DutchTrickle PVoutput

Beste antwoord (via Maverick op 11-03-2018 20:38)


  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 11:02
Je kunt in plaats van object notation, altijd bracket notation gebruiken, zoals:

JavaScript:
1
2
var a = sensor.data[0]['Usage']
var b = sensor.data[0]['SignalLevel']


Dat maakt het geheel al meteen een stuk dynamischer. Tevens zou je dan kunnen kijken of een key daadwerkelijk bestaat.



Zelf heb ik ongeveer ook zoiets gemaakt en dat heeft mij een weekend gekost om goed te krijgen. Alhoewel Domoticz een fantastisch pakket is, is de JSON interface niet echt prettig om mee te werken. Vooral niet om dynamisch een eigen applicatie te vullen.

Aan de andere kant is er wel extreem veel dynamiek mogelijk in de JSON interface...

Alle reacties


Acties:
  • 0 Henk 'm!

  • endness
  • Registratie: Maart 2006
  • Laatst online: 07-10 09:45
Wat wil je nou precies bereiken? Wil je data.result[0].Usage overschrijven met een andere waarde?

Met list bedoel je denk ik een array. Net als data.result kun je dat zien als een lijst, waar je de eerste (0), en verdere waarden uit kunt halen, mits beschikbaar.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Bedoel je dat sensor.var1 de "sname", "status", "data2", etc. bevat?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Maverick
  • Registratie: Oktober 2001
  • Laatst online: 08:25
Hm, ik ben niet duidelijk merk ik.

Gaat om sensor data. ik heb er een heleboel. iedere sensor heeft zijn eigen data, dat ziet er dan als volgt uit.
data.result[0].Name
data.result[0].Data;
data.result[0].Usage;
data.result[0].Id;
data.result[0].SignalLevel; etc.

nu wil niet niet bij iedere sensor dezelfde data laten zien. Bij een lamp wil ik data laten zien en bij de energiemeter de usage.

even simplistisch wil ik dit doen:

if (var1 == Signallevel){
data = sensor.data[0].signallevel}
elsif{var1 == usage){
data = sensor.data[0].usage}

Maar dan zonder dat ik van te voren weet welke waarden er allemaal zijn. Dus als var1 == "SignalLevel" dan op zoek gaan naar de waarde die bij sensor.data[0].signallevel hoort.

PSN: DutchTrickle PVoutput


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 11:02
Je kunt in plaats van object notation, altijd bracket notation gebruiken, zoals:

JavaScript:
1
2
var a = sensor.data[0]['Usage']
var b = sensor.data[0]['SignalLevel']


Dat maakt het geheel al meteen een stuk dynamischer. Tevens zou je dan kunnen kijken of een key daadwerkelijk bestaat.



Zelf heb ik ongeveer ook zoiets gemaakt en dat heeft mij een weekend gekost om goed te krijgen. Alhoewel Domoticz een fantastisch pakket is, is de JSON interface niet echt prettig om mee te werken. Vooral niet om dynamisch een eigen applicatie te vullen.

Aan de andere kant is er wel extreem veel dynamiek mogelijk in de JSON interface...

Acties:
  • 0 Henk 'm!

  • Maverick
  • Registratie: Oktober 2001
  • Laatst online: 08:25
Dat is em. Wist niet dat dat ook kon. tnx. :)

PSN: DutchTrickle PVoutput

Pagina: 1