2013-10-28 6 views
5

何が問題なのか理解してください。 JSON replyをオブジェクトとして解析します。SyntaxError:JSON解析エラー:予期しない識別子「オブジェクト」

PHPのprocess.phpコード:

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

JS(jQueryの)コード:

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

は、JSON文字列を返します

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

私が受け取るエラー:

SyntaxError: JSON Parse error: Unexpected identifier "object"

BUT!私は、データの代わりに結果を挿入しようとする(ただし、挿入 "引用符は、右/左):

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

そして、私は350 =警告だから、それは良い取り組んでご覧ください。

私はそのような何かを作ってみる:

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

をしかし、エラーの下に受信:

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

+0

それにアクセスすることができます。これを証明するには、成功コールバックの 'console.log($ .type(data))'を試してください。 – charlietfl

答えて

7

getJSON同様 はあなたのためにJSONを解析します。ちょうど$.parseJSONコールを省略し、dataを直接使用してください。


また、array_pushへの呼び出しが不思議で不必要であることに注意してください。 array_pushは通常配列とその値を使用しますが、最初の行では(例えば)$return['amount']"$amount"に設定してからをarray_pushに渡します。何もせずに警告またはエラーが表示される場合があります最悪の場合。

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

その後も"$amount"が不要であり、あなたが実際にこれを行うことができ、たとえば、前後に引用符ことを認識可能性があります:あなたはこれをしなかった場合とまったく同じ動作を取得したい

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

最後に、あなたが実際には非常に簡単にいくつかの特別なarray構文を使用して、すべての5行に凝縮することができます

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

を、私はそう自分自身を言う場合、これはかなり進歩して。

+0

また、なぜPHPスクリプトでarray_pushを使用していますか?配列に値を追加する場合は、次のようにするとより簡単に行うことができます。 $ return ['amount'] = $ amount; ' – andrewvnice

+0

@mazinsights:あなたのコメントは、私は最初にコードを書いた人ではありませんでした!しかし、私はそれを(実際にはもう少し実際に)私の答えに加えました。 – icktoofay

+0

上記の例では、簡単なコードを作っています。本当に、私は配列を使用しましたが、array_push配列を別の配列に渡すと、jsonの結果は良くありませんでした。 ["0"、{"key0": "値"、 "key1": "値"}、{"key0": "値"}] – Vasvas

0

あなたのエラーはここにあるように思え:

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

はそれらをエスケープしてみてください'と "\"を使います。 $.parseJSONが文字列[object Object]にオブジェクトを変換し、あなたにエラーを与えて、それを解析しようと呼び出し -

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

'' 'は二重引用符で囲まれた特殊文字ではありません。バックスラッシングは何もしません。おそらくあなたは '' \\ '"'を意味していましたが、あなたはまだ無効なJSONを生成しています。 – icktoofay

1

実際には解析する必要はありません。Uは、直接データ型を使用すると、REPONSEに `$ .parseJSON`を使用する必要はありませんjQueryのAjaxの方法でJSON受け取ったとき、それは既に内部変換されている

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

私は今はかなり明確だと思います –

関連する問題