2013-04-13 37 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

相关问题