Saya mengurai beberapa data menggunakan kelas tipe di controller saya, saya mendapatkan data sebagai berikut:
{
"data":{
"userList":[
{
"id":1,
"name":"soni"
}
]
},
"status":200,
"config":{
"method":"POST",
"transformRequest":[
null
],
"transformResponse":[
null
],
"url":"/home/main/module/userlist",
"headers":{
"rt":"ajax",
"Tenant":"Id:null",
"Access-Handler":"Authorization:null",
"Accept":"application/json, text/plain, */*"
}
},
"statusText":"OK"
}
Saya mencoba menyimpan data seperti ini
var userData = _data;
var newData = JSON.parse(userData).data.userList;
Bagaimana saya bisa mengekstrak daftar pengguna ke variabel baru?
javascript
angularjs
json
Soniya Mohan
sumber
sumber
JSON.parse
. Coba gunakanuserData
secara langsung sebagai objek.console.log(typeof userData)
ditampilkanobject
maka Anda sudah memiliki objek javascript dan bukan string JSON yang harus Anda uraikan.Unexpected token o in JSON
, kemungkinan besar Anda mencoba mengurai objek yang sudah dalam bentuk diuraikan.Jawaban:
JSON yang Anda poskan terlihat baik-baik saja, namun dalam kode Anda, kemungkinan besar bukan string JSON lagi, tetapi sudah menjadi objek JavaScript. Ini berarti, tidak perlu lagi menguraikan.
Anda dapat mengujinya sendiri, misalnya di konsol Chrome:
JSON.parse()
mengubah input menjadi string. ThetoString()
metode objek JavaScript dengan hasil standar[object Object]
, sehingga perilaku yang diamati.Coba yang berikut ini sebagai gantinya:
sumber
parameter pertama dari fungsi
JSON.parse
harus menjadi String, dan data Anda adalah objek JavaScript, jadi itu akan dikonversi ke String[object object]
, Anda harus menggunakanJSON.stringify
sebelum meneruskan datasumber
Jangan pernah gunakan
JSON.parse
tanpa membungkusnya ditry-catch
blok:sumber
Tepat di atas
JSON.parse
, gunakan:sumber
JSON.stringify()
mengkonversi objek JavaScript ke representasi string, yang merupakan kebalikan dari apa yangJSON.parse()
dilakukannya. Anda mendapatkanSyntaxError
karena Anda mencoba mengurai sesuatu yang sudah menjadi objek. Dalam solusi @ Sukhchain, itu akan dikonversi ke string untuk menghindari itu.JSON.parse()
terlalu banyak secara berlebihan. Meskipun ini proses yang cukup cepat, penguraian JSON dilakukan secara serempak dan berpotensi memblokir UI Anda, jadi saya menyarankan Anda untuk tidak menggunakannya. Sebagai gantinya, Anda bisa memeriksa apakah variabel Anda adalah objek, misalnya menggunakantypeof(userData) === 'object'
sebelum mencoba menguraikannya.Nah, saya berarti bahwa saya perlu untuk mengurai objek seperti ini:
var jsonObj = {"first name" : "fname"}
. Tapi, sebenarnya tidak. Karena sudah menjadi JSON.sumber
Kami juga dapat menambahkan cek seperti ini:
sumber
Kesalahan 'O' yang tidak terduga dilemparkan ketika data JSON atau String terjadi untuk diuraikan.
Jika itu adalah string, itu sudah diikat. Parsing berakhir dengan kesalahan 'O' yang tidak terduga.
Saya menghadapi hal yang sama (walaupun dalam konteks yang berbeda), saya memecahkan kesalahan berikut dengan menghapus JSON Produser.
Respons berisi string kembali "OK" . Anotasi yang ditandai sebagai @Produces ({** MediaType.APPLICATION_JSON }) ** mencoba mengurai string ke format JSON yang menghasilkan 'O' yang tidak terduga .
Menghapus @Produces ({ MediaType.APPLICATION_JSON }) berfungsi dengan baik. Output: Oke
Hati-hati: Juga, di sisi klien, jika Anda membuat permintaan ajax dan menggunakan JSON.parse ("OK"), ia melempar token 'O' yang tidak terduga
O adalah huruf pertama dari string
JSON.parse (objek) membandingkan dengan jQuery.parseJSON (objek);
JSON.parse ('{"name": "Yergalem", "city": "Dover"}'); --- Bekerja dengan baik
sumber