2013-04-13 107 views
30

我試着通過傳遞一個mulitidimensional Javascript數組到另一個網頁在我的網站:如何使用JSON.stringify和json_decode()正確

  • 陣列

  • 分配上透過JSON.stringify

    將所得值與輸入字段

  • 張貼的字段使用json_d第二頁

  • ECODE上張貼的價值

  • 隨後的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()來計算出它作爲Bart所消耗的回報JSON_ERROR_SYNTAX

+3

檢查'$ _ POST [ 「JSONfullInfoArray」]'的內容。如果某些東西不解析'json_code'就會返回'null'。另外使用'json_last_error()'來試着找出錯誤。 – Bart

+1

表單的一點HTML也會有幫助。使用瀏覽器的檢查員查看請求,你看到你的期望? – SuperSaiyan

+0

@Bart見上面的編輯,你有我需要的地方,拋出一個答案,我接受它:),非常感謝你 – DelightedD0D

回答

17

你會d檢查$_POST["JSONfullInfoArray"]的內容。如果有東西不解析json_decode將只返回null。這不是非常有用,所以當null返回時,您應該檢查json_last_error()以獲取有關出錯的更多信息。

16

當您使用JSON stringify時,請先在json_decode之前先使用html_entity_decode。

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

wp值得注意我在html_entity_decode中使用了上面的stripslashes來完成工作: – ThisGuyHasTwoThumbs

7
stripslashes(htmlspecialchars(JSON_DATA)) 
+0

我不確定爲什麼'htmlspecialchars()'必須在那裏。它會將引號字符('「')轉換爲'"',這意味着'json_decode()'不能處理它。我相信'JSON'格式必須是'{」key「:」value「 }',但通過使用'htmlspecialchars()'它會轉換爲'{" key ":" value "}'怎麼來'json_decode()'處理它? – Bayu

6

沒有其他的答案,因爲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"]); 

兩個回聲和的var_dump已被證實做工精細對包含URL字段和長文本字段的超過2000個用戶輸入數據集的樣本進行了測試,並且該數據集對於包含URL的子集在var_dump上返回了空值w ith字符?&#

+2

我也必須在PHP上使用'urldecode' – Albion

+2

As @Albion指出,字符串需要在'json_decode'被調用之前被URI解碼。'json_decode(urldecode($ _ POST [「JSONfullInfoArray」]));'' – Aurovrata

-1
jsonText = $_REQUEST['myJSON']; 

$decodedText = html_entity_decode($jsonText); 

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

當您使用JSON.stringify()保存一些數據,然後需要在php中讀取它。以下代碼適用於我。

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

由於@Thisguyhastwothumbs