Saya memiliki string dalam aplikasi server Java yang diakses menggunakan AJAX. Itu terlihat seperti berikut ini:
var json = [{
"adjacencies": [
{
"nodeTo": "graphnode2",
"nodeFrom": "graphnode1",
"data": {
"$color": "#557EAA"
}
}
],
"data": {
"$color": "#EBB056",
"$type": "triangle",
"$dim": 9
},
"id": "graphnode1",
"name": "graphnode1"
},{
"adjacencies": [],
"data": {
"$color": "#EBB056",
"$type": "triangle",
"$dim": 9
},
"id": "graphnode2",
"name": "graphnode2"
}];
Ketika string ditarik dari server, apakah ada cara mudah untuk mengubahnya menjadi objek JavaScript (atau array) yang hidup? Atau apakah saya harus membagi string secara manual dan membangun objek secara manual?
Jawaban:
Dukungan browser modern
JSON.parse()
.Dalam browser yang tidak, Anda dapat menyertakan satu
json2
perpustakaan .sumber
Inti dari JSON adalah bahwa string JSON dapat dikonversi ke objek asli tanpa melakukan apa pun. Periksa tautan ini
Anda dapat menggunakan salah satu
eval(string)
atauJSON.parse(string)
.Namun,
eval
berisiko. Dari json.org:sumber
Lakukan seperti jQuery! (esensi)
Dengan cara ini Anda tidak memerlukan pustaka eksternal dan masih berfungsi di browser lama.
sumber
eval()
.UNTUK mengumpulkan semua item array dan mengembalikan objek json
UNTUK mem-parse data yang sama yang kita lalui seperti ini
sumber
Anda juga bisa menggunakan
eval()
tetapiJSON.parse()
lebih aman dan lebih mudah, jadi mengapa Anda mau?bagus dan bekerja
Saya tidak melihat alasan mengapa Anda lebih suka menggunakannya
eval
. Itu hanya menempatkan aplikasi Anda dalam risiko.Yang mengatakan - ini adalah juga mungkin.
buruk - tetapi juga berfungsi
Mengapa itu
eval
ide yang buruk?Perhatikan contoh berikut.
Beberapa pihak ketiga atau pengguna menyediakan data string JSON.
Skrip sisi server Anda memproses data itu.
Menggunakan
JSON.parse
:akan melempar:
Fungsi tidak akan dieksekusi.
Kamu aman.
Menggunakan
eval()
:akan menjalankan fungsi dan mengembalikan teks.
Jika saya mengganti fungsi yang tidak berbahaya itu dengan yang menghapus file dari folder situs web Anda, Anda telah diretas. Tidak ada kesalahan / peringatan akan dilemparkan dalam contoh ini.
Anda TIDAK aman.
Saya bisa memanipulasi string teks JSON sehingga berfungsi sebagai fungsi yang akan dijalankan di server.
eval(JSON)[0].adjacencies[0].nodeTo
mengharapkan untuk memproses string JSON tetapi, pada kenyataannya, kami baru saja menjalankan suatu fungsi pada server kami.Ini juga bisa dicegah jika kita sisi server memeriksa semua data yang disediakan pengguna sebelum meneruskannya ke
eval()
fungsi tetapi mengapa tidak hanya menggunakan alat bawaan untuk mem-parsing JSON dan menghindari semua masalah dan bahaya ini?sumber
Dan jika Anda juga ingin objek deserialised memiliki fungsi, Anda dapat menggunakan alat kecil saya: https://github.com/khayll/jsmix
sumber
Jika Anda menempelkan string di sisi server ke html tidak perlu melakukan apa pun:
Untuk java biasa di jsp:
Untuk strut lebar jsp:
sumber
Saya pikir ini akan membantu:
Selain itu, dokumentasi juga membuktikan bahwa Anda dapat menggunakan require () untuk file json: https://www.bennadel.com/blog/2908-you-can-use-require-to-load-json-javascript-object-notation-files -in-node-js.htm
sumber