请帮我理解什么是错的。 我想将JSON回复解析为对象。
PHP process.php代码:
<?php
$return = array();
array_push($return['amount']="$amount");
array_push($return['fee']="$fee");
array_push($return['total']="$total");
echo json_encode($return);
?>
返回JSON字符串:
{"amount":"350","fee":"0","total":"350"}
JS(jquery)代码:
$.getJSON("process.php?amount="+amount, function(data,status) {
var obj = $.parseJSON(data);
alert (obj.amount);
});
我收到错误:
SyntaxError:JSON解析错误:意外的标识符“object”
BUT!当我尝试插入结果而不是数据时(但插入'左/右引号):
var obj = $.parseJSON('{"amount":"350","fee":"0","total":"350"}');
我看到警报= 350.所以,它运作良好。
我尝试做出类似的事情:
var jsonreply = "'"+data+"'";
var obj = $.parseJSON(jsonreply);
但收到以下错误:
SyntaxError:JSON解析错误:不允许使用单引号(') JSON
答案 0 :(得分:7)
getJSON
为您解析JSON - 调用$.parseJSON
会将对象转换为字符串[object Object]
,然后尝试解析它,给您一个错误。只需省略$.parseJSON
来电并直接使用data
。
此外,我应该注意到对array_push
的调用很奇怪且没必要。 array_push
通常会使用数组和值来推送它,但是(例如)在第一行中您将$return['amount']
设置为"$amount"
然后传递$return['amount']
到array_push
,它什么都不做,可能会给你一个警告或错误。如果你这样做,你会得到完全相同的行为:
$return['amount']="$amount";
$return['fee']="$fee";
$return['total']="$total";
那么您可能也会意识到,"$amount"
周围的引号是不必要的,您实际上可以这样做:
$return['amount']=$amount;
$return['fee']=$fee;
$return['total']=$total;
最后,您可以非常轻松地使用一些特殊的array
语法压缩所有五行:
echo json_encode(array(
'amount' => $amount,
'fee' => $fee,
'total' => $total
));
如果我自己这么说的话,那就更好了。
答案 1 :(得分:1)
其实你不需要解析它。你可以直接访问它
$.getJSON("process.php?amount="+amount, function(data,status) {
alert (data.amount);
});
答案 2 :(得分:0)
好像你的错误就在这里:
var jsonreply = "'"+data+"'";
尝试逃避那些'with“\”。 像
var jsonreply = "\'"+data+"\'";