Я немного смущен. если передать переменную 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);
Это может помочь кому-то.