Mal wieder JSON => Ergebnis = NULL

Hi,

ich möchte gerne einen JSON String zerlegen - bekomme es aber nicht hin.

Ich lade ihn mit:


$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://192.168.1.214/api/realTimeData.html');
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$json = curl_exec($ch);
curl_close($ch);

var_dump($json);

$data = json_decode($json);


var_dump($data);

$PowerNow = $data->Data;
echo "Result ".$PowerNow;

Beim oberen var_dump kommt er:

string(274) „{„method“:„uploadsn“,„version“:„Solax_SI_CH_2nd_20150902_DE01“,„type“:„AL_SE“,„SN“:„1761A29A“,„Data“:[0.0,0.0,0.0,0.0,3.1,230.4,677,33,9.0,12393.0,-40,0,0,49.66,-15.37,-765,21,25,0.0,4347.1,8386.20,22597.10,50.00,0.0,0.0,0,0.00,0],„Status“:„2“}“

Beim 2. var_dump kommt

NULL

also nach dem decode. Ich habe schon decode(encode) probiert … mit , true, ohne usw. Ich bin zu doof an die „Data“ Werte zu kommen … da habe ich auch schon ->Data[0] probiert, aber irgendwie scheint es vorher beim decode zu haken?

Was mache ich hier falsch?

Wenn Du das „json“ durch einen Validator jagst, wie JSON Validator, wirst Du feststellen, dass es sich um kein gültiges JSON handelt, daher kann PHP das auch nicht dekodieren.

Hallo
Teste mal dein $data mit einen JSON-Tester zB
https://jsonlint.com/
Dann siehst du deine ganzen „,“ sind das Problem.

Error: Parse error on line 6:
…1, 25, 0.0, 4347.1, , , , , , , , , , ,
-----------------------^
Expecting ‚STRING‘, ‚NUMBER‘, ‚NULL‘, ‚TRUE‘, ‚FALSE‘, ‚{‘, ‚[‘, got ‚,‘

Danke … die Frage wäre nun wie ich am schlausten an die Werte hinter Datakomme? Wenn ich diesen Wert habe, dann könnte ich das hinten dran als Array parsen.

Hallo
Probier mal das:

$wunsch = 0;
    $old = explode(",",$json);
    $newarray= array();
    foreach($old as $new )
        {
        if ($new == false) 
            $new = $wunsch;
        array_push($newarray,$new);       
        }

    $new = implode(",",$newarray);
    	
	print_r($newarray);

Was soll ich sagen … D A N K E :slight_smile:

Geht wie eine eins.

Falls die Daten, die geliefert werden, immer unterschiedlich sein sollten, aber dennoch immer vermurkst durch mehere Kommas, kannst Du auch alternativ das JSON reparieren und dann auslesen. Dann hast Du zumindest immer den gleichen Code ohne das eventuell der Key des Arrays variiert.


$json = preg_replace('/,+/', ',', $json);
$data = json_decode($json);
$status = $data->Status;
var_dump($status);

Danke Fonzo … wird auch probiert.

Die Daten, die Du da als Antwort von dem Gerät bekommst sind einfach Murks, bzw. kein JSON.

Wenn Du Data auslesen willst musst Du auch noch den Key korrigieren, da wird nämlich ein Leerzeichen mit übergeben als Antwort abgesehen von den vielen falschen Kommas.


$json = preg_replace('/,+/', ',', $json);
$json = str_replace("Data ", "Data", $json);
$payload = json_decode($json);
$status = $payload->Status;
var_dump($status);
$data = $payload->Data;
var_dump($data);