简体   繁体   中英

SyntaxError: JSON Parse error: Unexpected identifier “object”

Please help me to understand what's wrong. I want to parse JSON reply as object.

PHP process.php code:

<?php
    $return = array();
        array_push($return['amount']="$amount");
        array_push($return['fee']="$fee");
        array_push($return['total']="$total");
    echo json_encode($return);
?>

Returns JSON string:

{"amount":"350","fee":"0","total":"350"}

JS (jquery) code:

$.getJSON("process.php?amount="+amount, function(data,status) {
   var obj = $.parseJSON(data);
   alert (obj.amount);
});

I receive error:

SyntaxError: JSON Parse error: Unexpected identifier "object"

BUT! When I try to insert result instead data (but insert ' quotes left/right):

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

And I see alert = 350. So, it's working good.

I try to make something like that:

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

But received below error:

SyntaxError: JSON Parse error: Single quotes (') are not allowed in JSON

getJSON parses the JSON for you — calling $.parseJSON will convert the object into the string [object Object] and then try to parse that, giving you an error. Just omit the $.parseJSON call and use data directly.


Furthermore, I should note that the calls to array_push are strange and unnecessary. array_push usually takes an array and a value to push on to it, but (for example) in your first line you're setting $return['amount'] to "$amount" and then passing $return['amount'] to array_push , which does nothing at best and might give you a warning or error at worst. You'd get the exact same behavior if you did this:

$return['amount']="$amount";
$return['fee']="$fee";
$return['total']="$total";

Then you might also realize that the quotes around, say, "$amount" are unnecessary, and you could actually do this:

$return['amount']=$amount;
$return['fee']=$fee;
$return['total']=$total;

Finally, you can actually condense all five lines using some special array syntax very easily:

echo json_encode(array(
    'amount' => $amount,
    'fee' => $fee,
    'total' => $total
));

This is quite a bit nicer if I do say so myself.

Actually u dont need to parse it. U can directly access it

$.getJSON("process.php?amount="+amount, function(data,status) {
 alert (data.amount); 
});

It seems like your error is here:

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

Try to escape those ' with "\\". Like

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM