Подтвердить что ты не робот

Как правильно использовать JSON.stringify и json_decode()

Я пытаюсь передать многоуровневый массив Javascript на другую страницу моего сайта:

  • используя JSON.stringify в массиве

  • присвоение результирующего значения полю ввода

  • размещение этого поля на второй странице

  • используя json_decode для опубликованного значения

  • затем var_dump для проверки

  • (echo'ing опубликованная переменная непосредственно, чтобы увидеть, не получилось ли это вообще)

Javascript на первой странице:

var JSONstr = JSON.stringify(fullInfoArray);
document.getElementById('JSONfullInfoArray').value= JSONstr;

php на странице 2:

$data = json_decode($_POST["JSONfullInfoArray"]);
var_dump($data);

echo($_POST["JSONfullInfoArray"]);

Эхо работает отлично, но var_dump возвращает NULL

Что я сделал неправильно?


Это меня исправило:

$postedData = $_POST["JSONfullInfoArray"];
$tempData = str_replace("\\", "",$postedData);
$cleanData = json_decode($tempData);
var_dump($cleanData);

Я не уверен, почему, но почта проходила с кучей символов "\", разделяющих каждую переменную в строке

Выяснил это с помощью json_last_error(), как было сказано Бартом, который вернул JSON_ERROR_SYNTAX

4b9b3361

Ответ 1

Вам нужно проверить содержимое $_POST["JSONfullInfoArray"]. Если что-то не анализируется, json_decode просто вернет null. Это не очень полезно, поэтому, когда возвращается null, вы должны проверить json_last_error(), чтобы получить больше информации о том, что пошло не так.

Ответ 2

Когда вы используете JSON stringify, сначала используйте html_entity_decode перед json_decode.

$tempData = html_entity_decode($tempData);
$cleanData = json_decode($tempData);

Ответ 3

stripslashes(htmlspecialchars(JSON_DATA))

Ответ 4

Ни один из других ответов не работал в моем случае, скорее всего, потому, что массив JSON содержал специальные символы. Что исправлено для меня:

Javascript (добавлен encodeURIComponent)

var JSONstr = encodeURIComponent(JSON.stringify(fullInfoArray));
document.getElementById('JSONfullInfoArray').value = JSONstr;

PHP (без изменений)

$data = json_decode($_POST["JSONfullInfoArray"]);
var_dump($data);

echo($_POST["JSONfullInfoArray"]);

Как echo, так и var_dump были проверены на то, чтобы нормально работать с образцом из более чем 2000 введенных пользователем наборов данных, которые включали поле URL и длинное текстовое поле, и которые возвращали NULL в var_dump для подмножества, содержащего URL-адреса с символы ?&#.