JSON Objekt zerlegen und Array Element auslesen

Hallo,
eine Frage an die die programmieren können. Ich versuche ein JSON Objekt zu zerlegen und an die Werte zu kommen:

Das Objekt sieht so aus:

{„data“:{„rtctime“:„2017/9/26 21:33:14“,„values“:[0.0,0.0,0.0,0.0,2.4,231.7,529,36,8.0,4242.6,-25,0,0,51.15,-11.93,-612,23,48,0.0,1435.4,6326.70,15279.60]},„successful“:true,„message“:null}stdClass Object

Wenn ich es via „json_decode($json)“ zerlege erhalte ich:

(
[data] => stdClass Object
(
[rtctime] => 2017/9/26 21:33:14
[values] => Array
(
[0] => 0
[1] => 0
[2] => 0
[3] => 0
[4] => 2,4
[5] => 231,7
[6] => 529
[7] => 36
[8] => 8
[9] => 4242,6
[10] => -25
[11] => 0
[12] => 0
[13] => 51,15
[14] => -11,93
[15] => -612
[16] => 23
[17] => 48
[18] => 0
[19] => 1435,4
[20] => 6326,7
[21] => 15279,6
)

    )

[successful] => 1
[message] => 

)

Meine Frage - wie komme ich jetzt an das Objekt [4] = 2.4 ? Ich probiere jetzt seit einer Stunde diesen Array im Objekt zu erreichen, habe aber keinen Erfolg :confused:

Kann mir jemand helfen / einen Tipp geben wie ich diesen Wert in eine Variable bekomme?

Entweder:
$data = json_decode($json);
echo $data->data->values[4];
Oder:
$data = json_decode($json,true);
echo $data[‚data‘][‚values‘][4];

Michael

Super schnelle Antwort und Danke es geht.

Ich benötige auch einen Tip, ich bekomme diese Daten.

{
  "results": [
    {
      "operation": {
        "selector": "id:xx73d5017941",
        "power": "on",
        "color": "rgb:0,255,0",
        "brightness": 1
      },
      "results": [
        {
          "id": "xx73d5017941",
          "status": "ok",
          "label": "Lifx 1 - Wohnzimmer Stehlampe"
        }
      ]
    }
  ]
}

nun möchte ich die Variablen im IPS aktualisieren. Ich komme aber nicht an die Werte, warscheinlich weil ich was falsch mache :rolleyes:


echo $jsonarray->"results"->"operation"->"selector";

Wie zerlege ich dieses Array?

Deine Schreibweise ist ein Objekt kein Array.
Lösung:
echo $jsonarray->results->operation->selector;
Michael

$response = curl_exec($ch);
$jsonarray = json_decode($response, true);

echo $jsonarray->results->operation->selector;

{
„results“: [
{
„operation“: {
„selector“: „id:d073d5017941“,
„power“: „off“
},
„results“: [
{
„id“: „d073d5017941“,
„status“: „ok“,
„label“: „Lifx 1 - Wohnzimmer Stehlampe“
}
]
}
]
}
Notice: Trying to get property of non-object in /mnt/data/symcon/scripts/58578.ips.php on line 35

Notice: Trying to get property of non-object in /mnt/data/symcon/scripts/58578.ips.php on line 35

Notice: Trying to get property of non-object in /mnt/data/symcon/scripts/58578.ips.php on line 35

Kommt der Obere Teil immer Automatisch wenn eine anfrage gestartet wurde ? Ohne Echo kommt es dennoch zur anzeige eventuell muss ich wo anders den fehler suchen

Ließ bitte die PHP Doku zu json_decode.
In deinen Code musst den zweiten Parameter weglassen.
Michael


json_decode($response, true);

gibt einen Array zurück, diesen must Du dann auch wie von Nall-Chan beschrieben ansprechen.

Wenn Du


json_decode($response);

nimmst bekommst Du ein Standard Objekt zurück, dies kannst Du dann auch so wie von Dir vorgesehen ansprechen


echo $jsonarray->results->operation->selector;

Du musst Dich also entscheiden was Du haben willst ein StandardObjekt oder einen Array und dies dann entsprechend ansprechen.

Kann mir jemand sagen wie ich an die Daten der anderen Sensoren komme?

{"_id":„70:ee:50:17:ca:c0“,„cipher_id“:„enc:16:9VCDEDUqOvJQVT1HSXXNbGOyU7N53ZBSiz9qEaSDs8M6/S1FU0xtxrCQVTI5054r“,„last_status_store“:1524678756,„modules“:[{"_id":„02:00:00:17:cd:62“,„type“:„NAModule1“,„last_message“:1524678750,„last_seen“:1524678744,„dashboard_data“:{„Temperature“:8.8,„temp_trend“:„down“,„Humidity“:100,„time_utc“:1524678744,„date_max_temp“:1524645420,„date_min_temp“:1524616556,„min_temp“:7.7,„max_temp“:12.8},„data_type“:[„Temperature“,„Humidity“],„module_name“:„Au\u00dfen“,„last_setup“:1470484006,„battery_vp“:5532,„battery_percent“:81,„rf_status“:66,„firmware“:44},{"_id":„03:00:00:03:41:3c“,„type“:„NAModule4“,„last_message“:1524678750,„last_seen“:1524678744,„dashboard_data“:{„Temperature“:15.3,„temp_trend“:„stable“,„Humidity“:70,„CO2“:491,„time_utc“:1524678744,„date_max_temp“:1524607458,„date_min_temp“:1524674181,„min_temp“:15.2,„max_temp“:16.9},„data_type“:[„Temperature“,„CO2“,„Humidity“],„module_name“:„Till“,„last_setup“:1472285053,„battery_vp“:6072,„battery_percent“:100,„rf_status“:60,„firmware“:44},{"_id":„05:00:00:02:a3:b0“,„type“:„NAModule3“,„last_message“:1524678750,„last_seen“:1524678744,„dashboard_data“:{„Rain“:0,„time_utc“:1524678744,„sum_rain_24“:4.646,„sum_rain_1“:0},„data_type“:[„Rain“],„module_name“:„Regen“,„last_setup“:1472988873,„battery_vp“:5332,„battery_percent“:72,„rf_status“:74,„firmware“:8}],„place“:{„altitude“:48,„city“:„Kisdorf“,„country“:„DE“,„timezone“:„Europe/Berlin“,„location“:[10.082114,53.820538]},„station_name“:„Sieversh\u00fcttener Strasse, Kisdo“,„type“:„NAMain“,„dashboard_data“:{„Temperature“:21,„temp_trend“:„stable“,„Humidity“:64,„AbsolutePressure“:1001.2,„Pressure“:1006.9,„pressure_trend“:„up“,„Noise“:62,„CO2“:1041,„time_utc“:1524678746,„date_max_temp“:1524669667,„date_min_temp“:1524660242,„min_temp“:16.4,„max_temp“:21.9},„data_type“:[„Temperature“,„CO2“,„Humidity“,„Noise“,„Pressure“],„co2_calibrating“:false,„date_setup“:1470484006,„last_setup“:1470484006,„module_name“:„Wohnzimmer“,„firmware“:132,„last_upgrade“:1470484007,„wifi_status“:56}

Wenn ich $parsed_json->{‚dashboard_data‘}->{‚Temperature‘}; denn komme ich an die 21. ich möchte aber NAModule4 und 1 also 15.3 und 8.8
Dankeschön im Vorraus
Micha

Gleicher Hinweis… Doku in PHP lesen.
Und dann sich die Objekte z.b. mit print_r oder Var_dump ausgeben lassen.
Dann sieht man, dass modules immer ein Array ist.
Also ->modules[1]->
Aber warum den Aufwand? Es gibt zwei fertige Module für Netatmo :wink:
Michael

Ich bin nur ein Bauarbeiter und versuche mich in php um eine Wettersite zu erstellen. Aber danke für die Info ich werde mal nach den fertigen Skripts suchen.

Das sind eher Zusatzmodule für die Software IP-Symcon, da wirst du nicht viel mit anfangen können.
Für dein Vorhaben bist du hier im falschen Forum gelandet.
Um PHP in Verbindung mit Webserver für eine Seiten zu nutzen, gibt es bestimmt passendere Foren.
Michael

ch möchte einfach nur wissen was ich schreiben muss damit ich an die Daten komme an die innen Temp und dB und feuchte komm ich ja nur weiß ich nicht wie ich an die Daten der anderen Module komme und der hinweis mit dem Array War für jemanden der sich nicht besonders gut mit sowas auskennt nicht hilfreich. Ein Satz zum NAModule 1 und oder 4 würde mir schon reichen den Rest Reime ich mir denn schon zusammen .

http://www.mb07.de/wetter/w1

Kann es nicht testen, aber teste es Mal:
$parsed_json->modules[1]->{‚dashboard_data‘}->{‚Temperature‘};

Oder wenn du es zu einen Array anstatt Objekt dekodiert hast:
$parsed_json[‚modules‘][1][‚dashboard_data‘][‚Temperature‘]
Wobei die Zahl das jeweilige Modul beginnend mit 0 darstellen sollte.
Michael

UPS Wetter muss klein geschrieben werden. Sorry

Danke ich Versuch das mal

Sobald ich Modules2 oder 3 nehme steht da aber N/A . Wenn ich Modules1 nehme bekomme ich bin ich im Module4 ???

Ich komme nun an die außen und die Till Daten ich sage erstmal herzlichen Dank! Den Rest Reime ich mir denn schon zusammen.

Danke

Die Nummern entspreche der Reihenfolge der Daten im Datensatz.
Bei deinem Beispiel ist 0 dann NAModule1, 1 ist NAModule4 und 2 ist NAModule3.
Einen Index 3 gibt es nicht.
Darum der Hinweis sich einfach die Variable mit var_dump auszugeben.
Dort sieht man dann den Aufbau.
Michael

Danke ich weis jetzt wie ich an die gewünschten Daten komme.