web-dev-qa-db-ja.com

JSON.stringifyとjson_decode()を適切に使用する方法

多次元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()を使用してそれを把握しました

43
DelightedD0D

_$_POST["JSONfullInfoArray"]_の内容を確認する必要があります。何かが解析されない場合_json_decode_はnullを返すだけです。これはあまり役に立たないので、nullが返されたときは、json_last_error()をチェックして、何が問題であったかについての詳細を取得する必要があります。

21
Bart

JSON stringifyを使用する場合、json_decodeの前に最初にhtml_entity_decodeを使用します。

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

JSON.stringify()を使用してデータを保存し、それをphpで読み取る必要がある場合。次のコードは私のために働いた。

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

@Thisguyhastwothumbsに感謝

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

私の場合、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以上のユーザー入力データセットのサンプルで正常に動作することが確認されており、_?&#_。

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

$decodedText = html_entity_decode($jsonText);

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