JSON Decode Problem

Myar

Mitglied
Hallöchen!

Ich habe ein kleines Problem mit json decode.

Ich bekomme per GET einen String per AJAX übergeben. Ein mehrdimensionales Array.
Der String sieht dann so aus:

\"[{\\\"mid\\\":\\\"4\\\",\\\"text\\\":\\\"50\\\"},{\\\"mid\\\":\\\"5\\\",\\\"text\\\":\\\"weiß\\\"},{\\\"mid\\\":\\\"6\\\",\\\"text\\\":\\\"ohne Dimmer\\\"},{\\\"mid\\\":\\\"11\\\",\\\"text\\\":\\\"30\\\"}]\"

So kann man den nicht gebrauchen.

Also mache ich folgendes:
PHP:
$array = str_replace('\\', '', $array);
$array = str_replace('"[', '[', $array);
$array = str_replace(']"', ']', $array);

Damit der String so aussieht:
[{"mid":"4","text":"50"},{"mid":"5","text":"weiß"},{"mid":"6","text":"ohne Dimmer"},{"mid":"11","text":"30"}]

Dennoch bekomme ich hier:
PHP:
$array = json_decode($array, true);
print_r($array);

NULL raus. Wo liegt der Fehler?

Gruß
Myar
 
Zuletzt bearbeitet:
Hi, schau mal hier:

PHP:
<?php
header('Content-Type: text/html; charset=utf-8');
$json = '\"[{\\\"mid\\\":\\\"4\\\",\\\"text\\\":\\\"50\\\"},{\\\"mid\\\":\\\"5\\\",\\\"text\\\":\\\"weiß\\\"},{\ \\"mid\\\":\\\"6\\\",\\\"text\\\":\\\"ohne Dimmer\\\"},{\\\"mid\\\":\\\"11\\\",\\\"text\\\":\\\"30\\\"}]\"';

$json = substr(stripcslashes(stripcslashes($json)), 1, -1);

echo $json;

$data = json_decode($json, true);

if($data)
	var_dump($data);
else {
 switch(json_last_error())
 {
  case JSON_ERROR_DEPTH:
   echo ' - Maximale Stacktiefe überschritten';
  break;
  case JSON_ERROR_CTRL_CHAR:
   echo ' - Unerwartetes Steuerzeichen gefunden';
  break;
  case JSON_ERROR_SYNTAX:
   echo ' - Syntaxfehler, ungültiges JSON';
  break;
  case JSON_ERROR_NONE:
   echo ' - Keine Fehler';
  break;
  case JSON_ERROR_UTF8:
  	echo 'UTF-8-Fehler!';
  	break;
 }
}
 
Danke für die Antwort!

Aber:

PHP Fatal error: Call to undefined function json_last_error()

Laut PHP Manual müsste es die geben, ja :confused:
Edit:

Oh, ungeachtet der Funktion... dein Code hat geholfen, danke!
 
Zuletzt bearbeitet:
Die gibt's erst seit PHP 5.3. Hast du evtl. eine ältere Version? Mein Beispiel funktioniert aber auch ohne den json_last_error(). Was du eigentlich brauchst, ist nur der Teil mit

PHP:
$json = substr(stripcslashes(stripcslashes($json)), 1, -1);

Ich hab das der Vollständigkeit nur mit der Fehler-Auswertung eingebaut. Du könntest allerdings noch versuchen, error_reporting() und display_errors einzuschalten.
 
Zurück