JSON是一種便於操作使用的輕量級數據交換格式。易於人閱讀和編寫。同時也
易於機器解析和生成。
很多時候我們需要將JSON格式的字符串轉化為JSON對象或者將JSON對象轉為JSON字符串。特別是在AJAX應用中經常需要將JSON格式的字符串返回到前端,前端解析成js對象(JSON )。
現將工作中接觸到的一些方法總結如下:。
一. 將JSON字符串轉化為JSON對象
- eval方式解析。各個版本的瀏覽器都支持,也是以前最早使用的方式了,而且性能也不錯。使用方法為:eval('('+sJSON+')') ;注意:在字符串兩端再加上括號,否則會出錯。有時從數據庫讀出來的數據帶有空格,使 eval 失效。這時只要將字符串中的空格去掉即可result.replace(/\s/ig, ' ');
- new Function方式。各個版本的瀏覽器也都支持,看起來比較怪異。使用方法為:var json = (new Function("return " + sJSON))();
- 瀏覽器內置的JSON對象提供的方法。性能非常不錯,不過只有IE8/Firefox3.5+/Chrome4/Safari4/Opera10 及以后版本內置了該方法。用法為:JSON.parse(str); ie8(兼容模式),ie7和ie6雖然沒有此內置的JSON對象,不過你可以從https://github.com/douglascrockford/JSON-js上獲取json2.js文件使得ie6,ie7可以使用JSON對象中的parse()方法。注意:使用JSON.parse需嚴格遵守JSON規范,如屬性都需用引號引起來,否則為報錯,前兩種方式則沒有此問題。
- JQuery中的parseJSON方法。jQuery中也有將字符串轉為JSON格式的方法jQuery.parseJSON( json ),接受一個標准格式(屬性加上雙引號“”)的 JSON 字符串,並返回解析后的 JavaScript (JSON)對象。注意在JQuery中有些ajax的函數已經將服務器傳過來的數據轉化為了JSON對象了,比如$.getJSON("http://www.xxxxx/",{param:"xxx"},function(data){
//此處返回的data已經是json對象 });$.ajax()中dataType如果指定為json的話則也已經轉化為JSON對象了。
結論是:
在IE6,7中選擇使用eval(choose eval in IE6, 7)。
在IE8中選擇使用內置的JSON對象(choose native JSON in IE8)。
在火狐2,3中使用new Function(choose new Function in Firefox2, 3).
在Safari4中選擇使用eval(choose eval in Safari4)。
使用其他的瀏覽器則eval和new Function兩者性能差不多。
簡而言之:能用內置的JSON對象則使用JSON對象,否則的話只在火狐中使用new Function,其他都使用eval即可。
二. 將JSON對象轉化為JSON字符串
- 瀏覽器內置的JSON對象提供的方法。同理只有IE8/Firefox3.5+/Chrome4/Safari4/Opera10 及以后版本內置了該方法。用法為:JSON. stringify (json); ie8(兼容模式),ie7和ie6雖然沒有此內置的JSON對象,不過你可以從https://github.com/douglascrockford/JSON-js上獲取json2.js文件使得ie6,ie7可以使用JSON對象中的stringify()方法。
