多次元JavaScript配列をサイトの別のページに渡そうとしています:
配列でJSON.stringifyを使用する
結果の値を入力フィールドに割り当てる
そのフィールドを2ページ目に投稿する
投稿された値でjson_decodeを使用する
次にvar_dumpでテストします
(投稿された変数を直接エコーして、それがまったく通ったかどうかを確認します)
1ページ目のJavascript:
_var JSONstr = JSON.stringify(fullInfoArray);
document.getElementById('JSONfullInfoArray').value= JSONstr;
_
2ページの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_ERROR_SYNTAX
_を返したBartによって推測されたjson_last_error()
を使用してそれを把握しました
_$_POST["JSONfullInfoArray"]
_の内容を確認する必要があります。何かが解析されない場合_json_decode
_はnull
を返すだけです。これはあまり役に立たないので、null
が返されたときは、json_last_error()
をチェックして、何が問題であったかについての詳細を取得する必要があります。
JSON stringifyを使用する場合、json_decodeの前に最初にhtml_entity_decodeを使用します。
$tempData = html_entity_decode($tempData);
$cleanData = json_decode($tempData);
JSON.stringify()を使用してデータを保存し、それをphpで読み取る必要がある場合。次のコードは私のために働いた。
json_decode( html_entity_decode( stripslashes ($jsonString ) ) );
@Thisguyhastwothumbsに感謝
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の両方が、URLフィールドと長いテキストフィールドを含む2000以上のユーザー入力データセットのサンプルで正常に動作することが確認されており、_?&#
_。
jsonText = $_REQUEST['myJSON'];
$decodedText = html_entity_decode($jsonText);
$myArray = json_decode($decodedText, true);`