JSON编码/解码不能正常工作


JSON Encode/decode doesn't work as it should

我正在准备和发送JSON字符串从我的PHP文件到我的Javascript函数,像这样:

$json = array();
$json['slice'] = false;
$json['G500'] = false;
$json['KG1'] = false;   
$encoded = json_encode($json);
die($encoded);

然而,在我的JS函数中,如果我这样做,它无法解码JSON对象:

var d = req.responseText;                                           
var jsonObject = eval(d);

唯一的方法,我可以得到它的eval JSON对象是通过手动添加括号

jsonObject = eval("(" + d + ")");

我也有同样的问题。向PHP发送JSON对象并尝试解码失败。我相信在尝试解码之前,我需要删除PHP脚本中的括号。

为什么会发生这种情况?我能做些什么来解决这个不兼容的问题吗?

编辑:

PHP到JS现在工作,如果我使用JSON.parse。反过来我还是有问题。

这是我发送数据到PHP的方式:

var JSONstring = 
{
    "Product": document.getElementById('item').value, 
    "Size": document.getElementById('size').value,
    "Quantity": document.getElementById('quantity').value                                                   
};
url = "maintainOrder.php?json=" + JSON.stringify(JSONstring);
req.open("GET", url, true);

但是,PHP脚本无法解码。

$newItem = json_decode($_GET['json']);
array_push($_SESSION['order'],$newItem);

你的Javascript

eval有一个{开头字符的问题,因为块作用域有歧义。

使用括号强制将输入解析为表达式是一种解决方案,但您应该完全避免使用eval,并使用适当的JSON解码功能。


PHP

我们需要看到的数据,你发送给你的PHP脚本知道为什么它不会解析。一般来说,只要JSONLint接受你的JSON, PHP的json_decode也会接受。试试吧

关于php转javascript的问题,请参阅Tomalak Geret'kal的回答。

对于javascript到php也许我有解决方案:

如果你想在php中使用关联数组那么你必须将assoc参数设置为true传入json_decode(默认为false)

的例子:

$array = json_decode($jsonString, true);

我被咬了几次:默认情况下,json_decode尝试创建一个对象,如果它接收一个javascript对象(这是完美的意义,如果你认为),你必须强迫它呈现一个关联数组,如果你需要这种行为

我认为你需要做一些字符串处理,你所需要做的就是回显并查看JSON字符串的确切格式,并确保它符合标准格式,然后在服务器端和客户端使用字符串处理来达到预期的效果

你确定php没有添加斜杠到json文本吗?,尝试将json文本保存在服务器端的文件中以验证