6

请帮助我了解问题所在。我想将 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 解析错误:意外的标识符“对象”

但!当我尝试插入结果而不是数据时(但插入 ' 左/右引号):

var obj = $.parseJSON('{"amount":"350","fee":"0","total":"350"}');

我看到警报 = 350。所以,它运行良好。

我试着做这样的事情:

var jsonreply = "'"+data+"'";
var obj = $.parseJSON(jsonreply);

但收到以下错误:

SyntaxError:JSON 解析错误:JSON 中不允许使用单引号 (')

4

3 回答 3

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
));

如果我自己这么说的话,这会更好一些。

于 2013-10-28T01:40:23.230 回答
1

其实你不需要解析它。你可以直接访问它

$.getJSON("process.php?amount="+amount, function(data,status) {
 alert (data.amount); 
});
于 2013-10-28T01:41:26.413 回答
0

您的错误似乎在这里:

var jsonreply = "'"+data+"'";

尝试用“\”转义那些'。喜欢

var jsonreply = "\'"+data+"\'";
于 2013-10-28T01:39:52.690 回答