Anfänger Frage JSON.parse()
ralphi
- javascript
1 hotti0 1UnitedPower
Hi Leute,
wie komm ich an die Werte im mehrdimensionalen JSON, wenn ich die Anfangs-Feldnamen nicht weiß?
Ich lese mit einem Raspi die Temperatursensoren TX29IT (zur Zeit im Angebot mit Station) aus und speicher die Daten in einem JSON.
Jetzt bekomme ich nicht immer die gleichen Sensoren (nicht alle aktiv, bzw. auch mal vom Nachbarn). D.h. das erste Feld ist unbekannt.
Wie kann ich einfach alle aktiven Sensoren, ohne bekannte ID in ein Array speichern?
// hohl ich per AJAX
var json = '{"ID6c":{"init":"0","batt":"0","ID":"6c","temp":"-0.3","stamp":"1424078437"},"IDa0":{"hy":"15","init":"0","batt":"128","ID":"a0","temp":"20.4","stamp":"1424049514"},"IDc":{"hy":"48","init":"0","batt":"0","ID":"c","temp":"22.1","stamp":"1424077716"}}';
// ID der Sensoren: ID6c, IDa0 IDc wechseln / nicht immer verfügbar
obj = JSON.parse(json);
alert (obj.ID6c.temp); // -0.3
// alert (obj.?.temp);
Viele Grüße aus LA
hi,
Wie kann ich einfach alle aktiven Sensoren, ohne bekannte ID in ein Array speichern?
Erfasse sie in einer Schleife: for(att in obj)
Schöne Grüße.
Nicht alles was einfach ist, ist genial. Aber alles was genial ist, ist einfach :-) (AE)
for(attr in obj) - futzt - danke
Viele Grüße aus LA
Hi,
Nicht alles was einfach ist, ist genial. Aber alles was genial ist, ist einfach :-) (AE)
for(attr in obj) - futzt - danke
Danke auch, jetzt will ich aber mal was von Dir wissen: Welche Hardware zum Empfang der Signale von der Wetterstation setzt Du ein? Gibt es dafür Erweiterungskarten?
Schöne Grüße.
Hab von seegel-systeme. ein Modul. (Sehr schnelle Lieferung)
Hab schon einiges vorher ausprobiert (ohne Erfolg) :-(
Viele Grüße aus LA
Hab von seegel-systeme. ein Modul. (Sehr schnelle Lieferung)
Hab schon einiges vorher ausprobiert (ohne Erfolg) :-(
- RFM12b (von Pollin) direkt am Raspi nach der Anleitung
- Modul aus England
Hi danke für die Info. Ich glaub, das Bastelfieber hat mich wieder ;)
Nein, nicht das Rad neu erfinden, sondern das, was vorhanden ist, zweckmäßig verwenden. War schon immer mein Leitsatz ;)
Schöne Grüße.
Hakuna matata!
Wie kann ich einfach alle aktiven Sensoren, ohne bekannte ID in ein Array speichern?
Die SesorID wird als Eigenschaftsname in dem JSON-Objekt hinterlegt, der Sesonstzustand wird in dem Wert zu diesem Eigenschaftsname hinterlegt. Hab ich das richtig verstande?
Du kannst alle Eigenschaftsnamen eines Objekts (also hier die SensorIDs) mit Object.getOwnPropertyNames( myObject )
auslesen. Aus diesem Array der SensorIDs, kannst du dann einfach ein Array der Sensor-Zustände machen, in dem du darüber mapst:
var sensors = Object.getOwnPropertyNames( obj ).map( function ( sensorId ) {
return obj[ sensorId ];
});
Dann hast du allerdings nur die Sensor-Zustände und der Bezug zur SensorID ginge verloren. Du könntest die Map-Funktion so anpassen, dass du immer beides zur Verfügung hast:
var sensors = Object.getOwnPropertyNames( obj ).map( function ( sensorId ) {
return {
id : sensorId,
state : obj[ sensorId ]
}
});
also
Object.getOwnPropertyNames(obj).sort()
klappt - danke
Was map() ist (genau passiert), hab ich nix gefunden :-|
Viele Grüße aus LA
Lieber ralphi,
Was map() ist (genau passiert), hab ich nix gefunden :-|
wo hast Du denn gesucht? Im Wiki hier steht noch nichts dazu. Aber auf Mozillas Developer-Seiten, sowie auf Microsofts Developer-Seiten findet man etwas.
CanIUse verweist auf ECMAScript5, die wiederum behaupten, dass diese Methode eines Arrays mittlerweile hinreichend unterstützt wird.
Liebe Grüße,
Felix Riesterer.
Hi Felix,
Aber auf Mozillas Developer-Seiten, ..
jetzada :-) - mal sehen, was ich in meinem Fall verwende.
Viele Grüße aus LA
Liebe Ingrid,
Im Wiki hier steht noch nichts dazu.
aber jetzt schon.
Liebe Grüße,
Felix Riesterer.
sowohl die Antwort von 1UP, als auch von hotti futzt.
Die SesorID wird als Eigenschaftsname in dem JSON-Objekt hinterlegt, der Sesonstzustand wird in dem Wert zu diesem Eigenschaftsname hinterlegt. Hab ich das richtig verstande?
Der Grundgedanke ist, Module als Kacheln (bin KEIN Win8 Freund!) mit unterschiedlichen Messwerten und Daten aus der Hausautomation in eine (Web)App zu packen.
Das ganze soll flexibel sein. D.h. je nachdem welche Funk-, 1Wire-Sensoren bzw Wetterdaten von underground vorhanden sind, sollen die Kacheln auftauchen.
Je nach Objekt, gibt es unterschiedliche Kacheln:
zB:
Kachel1: Bez - Symbol - Wert
Kachel2: Bez1 - Wert1 - Bez2. - Wert2
und weitere:
entsprechend gibts unterschiedliche Json Objekte pro Kachel.
{"Kachel":"Wert"}
{"Kachel": {weiter Daten} }
Die einzelnen JSON werden dann in ein großes JSON zusammengepackt und per Ajax ausgelesen.
Ich denke das gewünschte Prinzip kann man sehen. Ups - jetzt wo ichs schreib: Da sind noch Logikfehler drin :-|
Viele Grüße aus LA