web-dev-qa-db-fra.com

comment utiliser correctement JSON.stringify et json_decode ()

J'essaie de transmettre un tableau Javascript multidimensionnel à une autre page de mon site en:

  • en utilisant JSON.stringify sur le tableau

  • attribution de la valeur résultante à un champ de saisie

  • poster ce champ sur la deuxième page

  • en utilisant json_decode sur la valeur publiée

  • puis var_dump pour tester

  • (faisant directement écho à la variable postée juste pour voir si elle est passée du tout)

Javascript sur la première page:

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

php sur la page deux:

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

echo($_POST["JSONfullInfoArray"]);

L'écho fonctionne bien mais var_dump renvoie NULL

Qu'est ce que j'ai mal fait?


Cela m'a arrangé:

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

Je ne suis pas sûr de savoir pourquoi mais le message venait avec un groupe de "\" caractères séparant chaque variable de la chaîne

Nous l'avons compris en utilisant json_last_error(), telle que proposée par Bart, qui a renvoyé JSON_ERROR_SYNTAX

43
DelightedD0D

Vous devrez vérifier le contenu de $_POST["JSONfullInfoArray"]. Si quelque chose n'analyse pas, json_decode Renverra simplement null. Ce n'est pas très utile alors quand null est retourné, vous devriez vérifier json_last_error() pour obtenir plus d'informations sur ce qui n'a pas bien fonctionné.

21
Bart

Lorsque vous utilisez JSON stringify, utilisez d'abord html_entity_decode avant json_decode.

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

Lorsque vous enregistrez des données à l'aide de JSON.stringify () et que vous devez ensuite les lire en php. Le code suivant a fonctionné pour moi.

json_decode( html_entity_decode( stripslashes ($jsonString ) ) );

Merci à @Thisguyhastwothumbs

9
S. A. Malik
stripslashes(htmlspecialchars(JSON_DATA))
8
LOVEPIN

Aucune des autres réponses n'a fonctionné dans mon cas, probablement parce que le tableau JSON contenait des caractères spéciaux. Ce qui l'a corrigé pour moi:

Javascript (ajouté encodeURIComponent)

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

PHP (inchangé de la question)

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

echo($_POST["JSONfullInfoArray"]);

Echo et var_dump ont été vérifiés pour un échantillon de plus de 2000 jeux de données entrés par l'utilisateur comprenant un champ URL et un champ de texte long et renvoyant la valeur NULL sous var_dump pour un sous-ensemble comprenant des URL avec les caractères ?&#.

8
Yuv
jsonText = $_REQUEST['myJSON'];

$decodedText = html_entity_decode($jsonText);

$myArray = json_decode($decodedText, true);`
2
KRISHNA KANT SINGH