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

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

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

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

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

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

  • затем var_dump для тестирования

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

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

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

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

 $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_last_error() как было сказано Бартом, который вернул JSON_ERROR_SYNTAX

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

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

 $tempData = html_entity_decode($tempData); $cleanData = json_decode($tempData); 
 stripslashes(htmlspecialchars(JSON_DATA)) 

Ни один из других ответов не работал в моем случае, скорее всего, потому, что массив 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-адреса с символами ?&# .