2013-03-25 34 views
241

Basit JSON dizelerini ayrıştırmakta sorun yaşıyorum. Onları JSONLint numaralı telefondan kontrol ettim ve geçerli olduklarını gösteriyor. Ama JSON.parse veya bana hata unexpected token o veriyor jQuery alternatifi kullanarak bunların ayrıştırmak çalıştığınızda: PHP json_encode() kullanarak dizeleri kodlayan ediyorum:JSON ayrıştırma "beklenmedik belirteç o" hatası veriyor

<!doctype HTML> 
<html> 
    <head> 
    </head> 
    <body> 
    <script type="text/javascript"> 
     var cur_ques_details ={"ques_id":15,"ques_title":"jlkjlkjlkjljl"}; 
     var ques_list = JSON.parse(cur_ques_details); 

     document.write(ques_list['ques_title']); 
    </script> 
    </body> 
</html> 

Not.

cevap

481

Kişisel veriler zaten bir nesnedir ayrıştırmak gerekmez, zaten bir JS nesnesidir. Ayrışmaya gerek yok. Javascript yorumlayıcısı sizin için zaten ayrıştırdı.

var cur_ques_details ={"ques_id":15,"ques_title":"jlkjlkjlkjljl"}; 
document.write(cur_ques_details['ques_title']); 
+5

neyin geçerli bir json nesnesi ise jQuery'den nasıl algılandığını kastediyor? – mko

+2

@mko: Bu durumda, yapmazsınız. Biliyorsun ya da bilmiyorsun. Şuna bakın ve JSON şartnamesine uygun olup olmadığına bakın. –

+3

@DarkFalcon, eğer bir json nesnesi ya da sadece düz bir dize olup olmadığını kontrol etmek için (typeof data == 'object') {arkadaşuff} ile birlikte gittim. – mko

9

cur_ques_details bunu

+6

bir "JSON nesnesi" diye bir şey yoktur. JSON bir dizedir. Demek istediğin "JS nesnesi". – Joseph

+2

Bence o, "javascript nesnesi" – raffi

9

Hatanızın kaynağı, ancak, tırnak içinde tam JSON dizesi yerleştirmeniz gerekir olmasıdır. Diğer katılımcılar söylediğim gibi bunu ayrıştırmak gerek kalmaz, nesne zaten bir JS nesnesine ayrıştırılır

<!doctype HTML> 
<html> 
    <head> 
    </head> 
    <body> 
     <script type="text/javascript"> 
      var cur_ques_details ='{"ques_id":"15","ques_title":"jlkjlkjlkjljl"}'; 
      var ques_list = JSON.parse(cur_ques_details); 
      document.write(ques_list['ques_title']); 
     </script> 
    </body> 
</html> 

: Aşağıdakiler örnek çözecektir. ayrıştırma olmadan aynı şeyi gerçekleştirmek için nasıl göstermek için, aşağıdakileri yapabilirsiniz:

<!doctype HTML> 
<html> 
<head> 
</head> 
    <body> 
     <script type="text/javascript"> 
      var cur_ques_details ={"ques_id":"15","ques_title":"jlkjlkjlkjljl"}; 
      document.write(cur_ques_details.ques_title); 
     </script> 
    </body> 
</html> 
4

Tepki zaten ayrıştırılır, yeniden ayrıştırmak gerekmez. Tekrar ayrıştırırsanız size "unexpected token o" verecektir.

$.ajax({ 
    url:... 
    success:function(data){ 
     //server response's data is JSON 
     //I use jQuery's parseJSON method 
     $.parseJSON(data);//it's ERROR 
    } 
}); 

tepki JSON olduğunu ve bu yöntemi kullanırsanız: Eğer dize olarak almak gerekiyorsa, ben jQuery AJAX kullanarak veri gönderirken aynı problem vardı JSON.stringify()

4

kullanabilirsiniz Aldığınız veriler bir JavaScript nesnesidir, ancak dataType:"text" kullanırsanız, veriler bir JSON dizisidir. Daha sonra $.parseJSON kullanımı tamamdır.

0

benim (eksik) kodu daha önce çalıştırın (canlı yeniden!) Ve [object Object] yerine {} özellikle anahtarlı yerel depolama değeri vardı çünkü bu unexpected token o hatayı görüyordum. Anahtarları değiştirene kadar, işler beklendiği gibi çalışmaya başlamamıştı. Alternatif olarak, these instructions to delete the incorrectly set localStorage value'u takip edebilirsiniz. JSON.stringify(data); kullanma

5

:

$.ajax({ 
    url: ... 
    success:function(data){ 
     JSON.stringify(data); //to string 
     alert(data.you_value); //to view you pop up 
    } 
}); 
+0

Sadece "JSON.stringify" 'ı çağırmak verilerinizle hiçbir şey yapmaz, işlev aslında _now_ serileştirilmiş verilerinizi döndürür. –

43

yüzden ayrıştırmak deneyin:

var yourval = jQuery.parseJSON(JSON.stringify(data)); 
+0

Bu, hata ayıklama için benim için çalıştı. Çok teşekkürler. Kontrol cihazımdan gereksiz gereksiz bilgileri eklediğimi anladım. – Pathros

İlgili konular