Почему json_decode не работает для меня? - программирование
Подтвердить что ты не робот

Почему 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-символы. Или, может быть, это проблема?

4b9b3361

Ответ 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);

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