Почему 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-символы. Или, может быть, это проблема?
Ответы
Ответ 1
Похоже, ваш сервер имеет magic_quotes_gpc
включен. Либо отключите его, либо запустите $stringJSON
через stripslashes()
, прежде чем использовать его.
$stringJSON = get_magic_quotes_gpc() ?
stripslashes($_GET['jsonstring']) : $_GET['jsonstring'];
Ответ 2
Это
[{\"Name\":\"name\",\"Description\":\"\"]
должно быть
[{\"Name\":\"name\",\"Description\":\"\"}]
Вам не хватает закрывающего }
Ответ 3
Если он показывает вам строку с косой чертой в ней, когда вы echo
, это означает, что в ней есть косые черты. Это не допустимая строка JSON, косые черты там не принадлежат. Если вы вставляете эту строку в PHP, косые черты оцениваются PHP. Строковый литерал "\""
в исходном коде PHP оценивается как строка "
, поэтому косые черты эффективно удаляются и вы декодируете допустимую строку JSON.
Я подозреваю, что у вас есть Magic Quotes, в которые вставляются косые черты в значения GET, отключите их.
Ответ 4
Это проблема с цитированием: Попробуйте следующее
$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);
Ответ 5
json_encode($str, JSON_UNESCAPED_SLASHES);
это может помочь вам.
Ответ 6
запустите json_decode дважды.
$str = json_decode($jsonData,true);
$str = json_decode($str,true);
Это может помочь кому-то.