JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於ECMAScript的一個子集。 JSON采用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成(一般用於提升網絡傳輸速率)。
一、JSON字符串轉換為JSON對象: eval() 和 JSON.parse
eg- json字符串:
var data = '{ "name": "dran", "sex": "man" }'; var obj = eval("("+data+")"); 或者 var obj = JSON.parse(data);
然後,就可以這樣讀取: alert(obj.name + obj.sex);
提示:為什麼要 eval這裡要添加 ("("+data+")");呢?
原因在於:eval本身的問題。 由於json是以”{}”的方式來開始以及結束的,在JS中,它會被當成一個語句塊來處理,所以必須強制性的將它轉換成一種表達式。
加上圓括號的目的是迫使eval函數在處理JavaScript代碼的時候強制將括號內的表達式(expression)轉化為對象,而不是作為語句(statement)來執行。舉一個例子,例如對象字面量{},如若不加外層的括號,那麼eval會將大括號識別為JavaScript代碼塊的開始和結束標記,那麼{}將會被認為是執行了一句空語句
二、JSON對象轉換為JSON字符串 : obj.toJSONString()或者全局方法JSON.stringify(obj) (obj代表json對象)
eg-json對象: var obj = { "name": "dran", "sex": "man" }; var jstring = JSON.stringify(obj) ;// 建議用這個 var jstring = obj.toJSONString(); //toJSONString()不是js原生的方法,需要引入相應的庫或自己定義後才能用 (不習慣用)
然後,就可以這樣讀取: alert(jstring);
注意:
目前,Firefox、Opera、IE8以上版本也提供了本地JSON支持。其中,JSON解釋器提供的函數有:JSON.parse、JSON.stringify。 對於那些並不提供本地JSON支持的浏覽器可以引入腳本json2.js,來實現JSON轉換功能。json2.js腳本可到https://github.com/douglascrockford/JSON-js/blob/master/json2.js頁面下載
在AJAX實現前後台數據交互的時候,通常使用JSON的數據格式,對於JSON來說,有嚴格的代碼規范,一旦格式出問題,就無法顯示出相應效果,同時還不在控制台報錯
補充: ajax讀取json數據拼接顯示:
json文件:
{ "first":[ {"name":"張三","sex":"男","like":["吃飯","睡覺","打豆豆"]}, {"name":"李四","sex":"男"}, {"name":"王武","sex":"男"}, {"name":"李梅","sex":"女"}, ], "second":[ {"name":"上海大學","area":"上海"}, {"name":"武漢大學","area":"武漢"}, {"name":"北京大學","area":"北京"}, {"name":"山東大學","area":"山東"}, ] }
html和ajax代碼
1、用for循環
$.ajax({ url : "ceshi.json", type : "POST", dataType :"text", //浏覽器把json文件當作文本文件 不然讀取不出來 權宜之策就改成了text, 因為測試, json文件格式正確書寫 success: function(data) { var dataJson = eval("("+data+")"); // 將json字符串數據解析成對象 var arr1 = dataJson.first; var arr2 = dataJson.second; //一欄顯示 用for循環完成數組解析 for(var i = 0; i<arr1.length; i++){ for(var j = 0; j<arr2.length; j++){ var str='<div style="display:block">'+ '<div>姓名:'+arr1[i].name+' 性別:'+arr1[i].sex+'</div>'+ '<div>學校:'+arr2[j].name+'</div>'+ '<div>地點:'+arr2[j].area+'</div>'+ //'<div>喜好:'+arr1[i].like+'</div>'+ //全顯示 //'<div>喜好:'+arr1[i].like[1]+'</div>'+ //單獨設置 //'<div>喜好:'+arr1[i].like[0]+'</div>'+ '</div>'; } $(".result").append(str); } //分層顯示 //var str = ""; // var str1 = ""; // if (arr1 != null) { // for (var i = 0; i < arr1.length; i++) { //這裡面都是創建並賦值 // str += "<span>" + arr1[i].name + "</span><span>" + arr1[i].sex + "</span><br>"; // } // $(".result").html(str); // } // if (arr2 != null) { // for (var j = 0; j < arr2.length; j++) { // str1 += "<span>" + arr2[j].name + "</span><span>" + arr2[j].area+ "</span><br>"; // } // $(".result2").html(str1); // } }, error:function(data){ alert("error"); } }) <div class="result">frist:</div> <div class="result2">second:</div> for
2、 each循環 使用$.each方法遍歷返回的數據date,插入到class為 .result中
JSON:
[ {"name":"張三","sex":"男","like":["吃飯","睡覺","打豆豆"]}, {"name":"李四","sex":"男"}, {"name":"王武","sex":"男"}, {"name":"李梅","sex":"女"}, ] $.ajax({ url : "ceshi.json", type : "POST", dataType :"text", //浏覽器把json文件當作文本文件 不然讀取不出來 權宜之策就改成了text, 因為測試, json文件格式正確書寫 success: function(data) { var dataJson = eval("("+data+")"); // 將json字符串數據解析成對象 //each循環 使用$.each方法遍歷返回的數據date,插入到class為 .result中 i 表示索引 item 信息值 對象 $.each(dataJson,function(i,item){ var str='<div style="display:block">'+ '<div>姓名:'+item.name+' 性別:'+item.sex+'</div>'+ '<div>like:'+item.like+'</div>'+ '</div>'; $(".result").append(str); }) }, error:function(data){ alert("error"); } }) <div class="result"></div> each
PS:對於一般的js生成json對象,只需要將$.each()方法替換為for語句即可,其他不變
JSON 數據使用方法:
//json對象: var jsonObj= { "name":" 張三", "sex":"男", "age":26, }; 使用: jsonObj.name= "張三" jsonObj.age= "26" //json數組: []下標 從 0 開始 var jsonArr =[ {"name":"張三","sex":"男","like":["吃飯","睡覺","打豆豆"]}, {"name":"李四","sex":"男"}, {"name":"王武","sex":"男"}, ] 使用: jsonArr[0].sex="男" jsonArr[1].name="李四" //多個數組: []下標 從 0 開始 var options = { "city" :[ { "name":"上海", "area":"普陀區", "option":"真北路", "correct":"1" }, { "name":"石家莊", "area":"河北", "option":"在北方", "correct":"2" }], "world":[ { "title":"美國", "content":"好萊塢大片 科幻" }, { "title":"中國", "content":"愛我中華,雖遠必誅" } ] }; options.city[0].area="普陀區" options.world[1].content="愛我中華,雖遠必誅
以上所述是小編給大家介紹的Json對象和字符串互相轉換json數據拼接和JSON使用方式詳細介紹(小結),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對網站的支持!