apa yang menyebabkan kesalahan ini di baris ketiga?
var products = [{
"name": "Pizza",
"price": "10",
"quantity": "7"
}, {
"name": "Cerveja",
"price": "12",
"quantity": "5"
}, {
"name": "Hamburguer",
"price": "10",
"quantity": "2"
}, {
"name": "Fraldas",
"price": "6",
"quantity": "2"
}];
console.log(products);
var b = JSON.parse(products); //unexpected token o
Buka konsol untuk melihat kesalahan
javascript
jquery
json
coiso
sumber
sumber
Jawaban:
products
adalah sebuah objek. (Menciptakan dari objek literal)JSON.parse()
digunakan untuk mengkonversi string yang berisi notasi JSON menjadi objek Javascript.Kode Anda mengubah objek menjadi string (dengan memanggil
.toString()
) untuk mencoba menguraikannya sebagai teks JSON.Default
.toString()
kembali"[object Object]"
, yang tidak JSON valid; karenanya kesalahan.sumber
.toString()
mengembalikan (sesuai spek).Katakanlah Anda tahu itu JSON yang valid tetapi Anda masih mendapatkan ini ...
Jika demikian, kemungkinan ada karakter tersembunyi / khusus di string dari sumber apa pun yang Anda dapatkan. Saat Anda menempelkan ke validator, mereka akan hilang - tetapi dalam string mereka masih ada. Karakter-karakter itu, meski tidak terlihat, akan pecah
JSON.parse()
Jika
s
JSON mentah Anda, bersihkan dengan:sumber
s = s.replace(/[\u0000-\u001F]+/g,"");
bukans = s.replace(/[\u0000-\u0019]+/g,"");
, untuk mengganti semua karakter kontrol. Baik?Tampaknya Anda ingin merangkai objek. Jadi lakukan ini:
Alasan untuk kesalahan adalah bahwa
JSON.parse()
mengharapkanString
nilai danproducts
merupakanArray
.Catatan: Saya pikir ini upaya
json.parse('[object Array]')
yang mengeluh tidak mengharapkan tokeno
setelahnya[
.sumber
Saya menemukan masalah yang sama dengan
JSON.parse(inputString)
.Dalam kasus saya, string input berasal dari halaman server saya [pengembalian metode halaman] .
Saya mencetak
typeof(inputString)
- itu string, masih terjadi kesalahan.Saya juga mencoba
JSON.stringify(inputString)
, tetapi itu tidak membantu.Kemudian saya menemukan ini menjadi masalah dengan operator saluran baru
[\n]
, di dalam nilai bidang.Saya melakukan penggantian [dengan beberapa karakter lain, mengembalikan baris baru setelah parse] dan semuanya bekerja dengan baik.
sumber
JSON.parse sedang menunggu parameter String in. Anda perlu merangkai objek JSON Anda untuk menyelesaikan masalah.
sumber
mengubah
sumber
JSON.parse
, argumen harus berupa string.JSON.parse(products.replace(/'/g, '"'))
Anda harus memvalidasi string JSON Anda di sini .
String JSON yang valid harus memiliki tanda kutip ganda di sekitar tombol:
Jika tidak ada tanda kutip, itu akan menyebabkan kesalahan:
Menggunakan tanda kutip tunggal juga akan menyebabkan kesalahan:
sumber
render ([key: value])
dengan tanda kutip tunggal, yang mengarah ke JSON parseError di posisi 1 di jquery Ajax.render (groovy.json.JsonOutput.toJson ([key:value]))
membantu saya.Jika ada spasi awal atau akhir, itu tidak valid. Trailing / Leading spasi dapat dihapus sebagai
Sumber: http://www.toptip.ca/2010/02/javascript-trim-leading-or-trailing.html
sumber
Ini Json sempurna Anda yang dapat Anda parsing.
sumber
Inilah fungsi yang saya buat berdasarkan balasan sebelumnya: berfungsi pada mesin saya tetapi YMMV.
sumber
Satu gotcha lain yang dapat menghasilkan
"SyntaxError: Unexpected token"
pengecualian saat memanggilJSON.parse()
menggunakan salah satu dari yang berikut ini dalam nilai string:Karakter baris baru.
Tab (ya, tab yang dapat Anda hasilkan dengan tombol Tab!)
Setiap tebasan yang berdiri sendiri
\
(tetapi karena alasan tertentu tidak/
, setidaknya tidak di Chrome.)(Untuk daftar lengkap, lihat bagian String di sini .)
Misalnya, berikut ini akan memberi Anda pengecualian ini:
Jadi itu harus diubah menjadi:
Yang, saya harus katakan, membuatnya sangat tidak dapat dibaca dalam format JSON-only dengan jumlah teks yang lebih besar.
sumber
Saat Anda menggunakan metode POST atau PUT, pastikan untuk merangkaikan bagian tubuh.
Saya telah mendokumentasikan sebuah contoh di sini https://gist.github.com/manju16832003/4a92a2be693a8fda7ca84b58b8fa7154
sumber
Semoga ini bisa membantu orang lain.
Masalah saya adalah bahwa saya telah berkomentar HTML dalam fungsi panggilan balik PHP melalui AJAX yang mem-parsing komentar dan mengembalikan JSON yang tidak valid.
Setelah saya menghapus HTML komentar, semuanya baik dan JSON diuraikan tanpa masalah.
sumber
produk adalah array yang dapat digunakan secara langsung:
sumber
Sekarang tampaknya
\r
,\b
,\t
,\f
, dll tidak chars hanya bermasalah yang dapat memberikan kesalahan ini.Perhatikan bahwa beberapa browser mungkin memiliki persyaratan tambahan untuk input
JSON.parse
.Jalankan kode tes ini di browser Anda:
Menguji di Chrome, saya melihat bahwa itu tidak memungkinkan di
JSON.parse(String.fromCharCode(0x22, x, 0x22));
manax
34, 92, atau dari 0 hingga 31.Karakter 34 dan 92 adalah karakter
"
dan\
masing-masing, dan mereka biasanya diharapkan dan lolos dengan benar. Karakter 0 hingga 31 yang akan memberi Anda masalah.Untuk membantu debug, sebelum Anda melakukannya
JSON.parse(input)
, pertama-tama verifikasi bahwa input tidak mengandung karakter yang bermasalah:sumber
Mengapa Anda membutuhkan JSON.parse? Sudah dalam array format objek.
Lebih baik gunakan JSON.stringify seperti di bawah ini:
var b = JSON.stringify(products);
Ini dapat membantu Anda.
sumber
Oh man, solusi dalam semua jawaban di atas yang diberikan sejauh ini tidak berhasil untuk saya. Saya punya masalah yang sama tadi. Saya berhasil menyelesaikannya dengan membungkusnya dengan kutipan. Lihat tangkapan layar. Whoo
Asli:
sumber
Kesalahan yang Anda dapatkan yaitu "token o yang tidak terduga" adalah karena json diharapkan tetapi objek diperoleh saat parsing. "O" itu adalah huruf pertama dari kata "objek".
sumber
Satu-satunya kesalahan yang Anda lakukan adalah, Anda mem-parsing objek yang sudah di-parsing jadi itu kesalahan melempar, gunakan ini dan Anda akan baik untuk pergi.
jika Anda ingin mencetak seluruh json maka gunakan JSON.stringify ()
sumber
Ini bisa terjadi karena banyak alasan, tetapi mungkin untuk char yang tidak valid, jadi Anda bisa menggunakannya
JSON.stringify(obj);
yang akan mengubah objek Anda menjadi JSON tetapi ingat bahwa itu adalah ekspresi JQUERY.sumber
Saya memiliki kesalahan ini KARENA API yang mengembalikan objek json memberi AN ERROR (dalam kasus saya Penyala Kode, kembalikan html ketika kode php gagal) jadi INI BUKAN OBYEK JSON.
Periksa Kalimat SQL dan kode PHP, dan mengujinya dengan tukang pos (atau beberapa tester API lainnya)
sumber
Kesalahan yang saya lakukan adalah melewatinya
null
(tanpa sadar) ke JSON.parse ().Jadi itu melempar
Unexpected token n in JSON at position 0
sumber
Gunakan
eval
. Dibutuhkan ekspresi / kode JavaScript sebagai string dan mengevaluasi / mengeksekusinya.sumber