Artikel ini menganalisis secara terperinci langkah berjaga-jaga untuk menggunakan eval untuk menghuraikan JSON dalam JS. Kongsikan dengan semua orang untuk rujukan anda, butirannya adalah seperti berikut:
Secara amnya terdapat dua cara untuk menghuraikan rentetan JSON ke dalam format data JSON dalam JS:
1. Salah satunya ialah menggunakan fungsi eval().
2. Gunakan objek Fungsi untuk melakukan analisis pulangan.
Gunakan fungsi eval untuk menghuraikan, dan gunakan setiap kaedah jquery untuk melintasi
Gunakan jquery untuk menghuraikan data JSON Sebagai objek penghantaran permintaan asynchronous jquery, hasil yang dikembalikan selepas permintaan jquery adalah objek json Apa yang dipertimbangkan di sini ialah bentuk rentetan yang dikembalikan oleh pelayan dalam bentuk JSON -in seperti JSONObject Objek JSON adalah serupa dengan ini dan tidak akan dijelaskan di sini.
Set rentetan JSON pertama kali diberikan di sini Set rentetan adalah seperti berikut:
Kod adalah seperti berikut:
var data=" { root: [ {name:'1',value:'0'}, {name:'6101',value:'北京市'}, {name:'6102',value:'天津市'}, {name:'6103',value:'上海市'}, {name:'6104',value:'重庆市'}, {name:'6105',value:'渭南市'}, {name:'6106',value:'延安市'}, {name:'6107',value:'汉中市'}, {name:'6108',value:'榆林市'}, {name:'6109',value:'安康市'}, {name:'6110',value:'商洛市'} ] }";
Berdasarkan jenis data yang diperoleh secara tak segerak oleh jquery - objek dan rentetan json, di sini kami memperkenalkan kaedah pemprosesan hasil yang diperoleh dalam dua cara.
1. Untuk rentetan JSON yang dikembalikan oleh pelayan, jika permintaan asynchronous jquery tidak mempunyai perihalan jenis, atau diterima sebagai rentetan, maka kaedah ini tidak terlalu menyusahkan, iaitu, meletakkan rentetan dalam eval () dilaksanakan sekali. Kaedah ini juga sesuai untuk mendapatkan objek json menggunakan javascipt biasa Berikut adalah contoh:
var dataObj=eval("("+data+")");//转换为json对象 Red rose为什么要 eval这里要添加 “("("+data+")");//”呢?
Sebabnya ialah: masalah eval itu sendiri. Memandangkan json bermula dan berakhir dengan "{}", ia akan diproses sebagai blok pernyataan dalam JS, jadi ia mesti dipaksa untuk ditukar menjadi ungkapan.
Tujuan menambah kurungan adalah untuk memaksa fungsi eval menukar ungkapan dalam kurungan kepada objek dan bukannya melaksanakannya sebagai pernyataan semasa memproses kod JavaScript. Contohnya, jika objek literal {} tidak ditambah dengan kurungan luar, maka eval akan mengenali pendakap sebagai tanda mula dan tamat blok kod JavaScript dan {} akan dianggap untuk melaksanakan pernyataan kosong. Jadi dua keputusan pelaksanaan berikut adalah berbeza:
alert(eval("{}"); // return undefined alert(eval("({})");// return object[Object]
Tulisan seperti ini boleh dilihat di mana-mana di JS.
Contohnya: (function()) {}(); semasa melakukan operasi penutupan, dsb.
alert(dataObj.root.length);//输出root的子对象数量 $.each(dataObj.root,fucntion(idx,item){ if(idx==0){ return true; } //输出每个root子对象的名称和值 alert("name:"+item.name+",value:"+item.value); })
Nota: Untuk js umum menjana objek json, anda hanya perlu menggantikan kaedah $.each() dengan pernyataan for dan yang lain kekal tidak berubah.
2. Untuk rentetan JSON yang dikembalikan oleh pelayan, jika permintaan asynchronous jquery menetapkan jenis (biasanya atribut konfigurasi ini) kepada "json", atau menggunakan kaedah $.getJSON() untuk mendapatkan pulangan pelayan, maka ada kaedah eval ( ) tidak perlu, kerana hasil yang diperoleh pada masa ini sudah menjadi objek json, anda hanya perlu memanggil objek secara langsung Di sini, kaedah $.getJSON digunakan sebagai contoh untuk menggambarkan kaedah pemprosesan data:
$.getJSON("http://www.phpzixue.cn/",{param:"gaoyusi"},function(data){ //此处返回的data已经是json对象 //以下其他操作同第一种情况 $.each(data.root,function(idx,item){ if(idx==0){ return true;//同countinue,返回false同break } alert("name:"+item.name+",value:"+item.value); }); });
Apa yang memerlukan perhatian khusus di sini ialah kaedah eval() dalam kaedah 1 melaksanakan rentetan secara dinamik (mungkin skrip js), yang boleh menyebabkan isu keselamatan sistem dengan mudah. Oleh itu, anda boleh menggunakan beberapa perpustakaan skrip klien pihak ketiga yang memintas eval(). Contohnya, JSON dalam JavaScript menyediakan perpustakaan skrip tidak lebih daripada 3k.
Kaedah penghuraian kedua ialah menggunakan objek Fungsi Aplikasi tipikalnya ialah penghuraian data yang dikembalikan seperti kejayaan di bawah kaedah AJAX dalam JQUERY
var json='{"name":"CJ","age":18}'; data =(new Function("","return "+json))();
Data pada masa ini ialah objek json yang akan dihuraikan.
Saya harap artikel ini akan membantu semua orang dalam pengaturcaraan JavaScript.