Почему json_decode не работает для меня?

Я немного смущен. если передать переменную json_decode, она не работает:

$stringJSON = $_GET['jsonstring']; echo $stringJSON; $stringObject = json_decode($stringJSON); var_export($stringObject); 

Первое эхо правильно показывает мне строку JSON, которую я передал, например

 {\"Items\":[{\"Name\":\"name\",\"Description\":\"\"],\"Name\":\"Christmas\"} 

Второе эхо показывает NULL. Поэтому я беру строку из первого эха и записываю следующий код:

 $stringObject = json_decode("{\"Items\":[{\"Name\":\"name\",\"Description\":\"\"],\"Name\":\"Christmas\"}"); var_export ($stringObject); 

И что вы скажете, это показывает мне правильно декодированный массив. Строка абсолютно то же самое, я даже сохранил escape-символы. Или, может быть, это проблема?

Похоже, ваш сервер имеет magic_quotes_gpc включен. Либо отключите его, либо запустите $stringJSON через stripslashes() перед его использованием.

 $stringJSON = get_magic_quotes_gpc() ? stripslashes($_GET['jsonstring']) : $_GET['jsonstring']; 

Эта

 [{\"Name\":\"name\",\"Description\":\"\"] 

должно быть

 [{\"Name\":\"name\",\"Description\":\"\"}] 

Вам не хватает закрытия }

Если он показывает вам строку с косой чертой в ней, когда вы ее echo , это означает, что в ней есть косые черты. Это не допустимая строка JSON, косые черты там не принадлежат. Если вы вставляете эту строку в PHP, косые черты оцениваются PHP. Строковый литерал "\"" в исходном коде PHP оценивается по строке " , поэтому косые черты эффективно удаляются и вы декодируете действительную строку JSON.

Я подозреваю, что у вас есть магические кавычки, на которые вставляются косые черты в значения GET, отключите их.

Это проблема с цитированием. Попробуйте следующее.

 $stringObject = json_decode("{\"Items\":[{\"Name\":\"name\",\"Description\":\"\"],\"Name\":\"Christmas\"}"); echo $stringObject; var_export ($stringObject); 

как вы видите, $ stringObject не имеет кавычек (но тот, который исходит от $ _GET, имеет их)

так что вам может понадобиться

 $stringJSON = $_GET['jsonstring']; $stringObject = json_decode(stripslashes($stringJSON)); var_export($stringObject); 
 json_encode($str, JSON_UNESCAPED_SLASHES); 

это может помочь вам.

запустите json_decode дважды.

 $str = json_decode($jsonData,true); $str = json_decode($str,true); 

Это может помочь кому-то.