首頁 > web前端 > js教程 > 主體

JavaScript遍歷Json字串瀏覽器輸出的結果不統一問題

高洛峰
發布: 2016-12-07 17:19:50
原創
1133 人瀏覽過

沒有介紹正文之前先跟大家說下json是什麼。

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式,我們稱之為JavaScript物件表示法。使用JSON進行資料傳輸的優點之一是JSON其實就是JavaScript。它是基於ECMAScript第3版中JavaScript物件字面量語法子集的一種文字格式。這表示可以使用responseText從伺服器中檢索JSON數據,然後再使用JavaScript的eval()方法將JSON字串轉換成JavaScript對象,那麼,使用附加JavaScript就可以很地從該對像中提取數據,而不需要處理DOM。

我們在做專案的時候常常會用到javascript的json。

先說一下javascript的json字串是什麼,json串屬於javascript的一個對象,有鍵和值對應的對象。

一般的格式是:

a = {
a1 : 1,
a2 : 'abc',
a3 : 'abc',
a4 : [1,2,3],
a5 : function(){console.log(12)}
};
登入後複製

   

我們讀取這個json 的方法是透過for in 循環來遍歷;

使用json串的好處是可以事先將資料庫中的資料存成json的形式,然後透過javascript來讀取裡邊的屬於,這樣可以大大減少對伺服器的請求次數,增加了前台頁面的載入效率。

我們在遍歷json的時候會遇到許多問題,我今天遇到的問題是在我們把json串的鍵值寫成數字的情況下,在主流瀏覽器遍歷的時候不會按照我們輸出的json的結構先後輸出,而是依照數字的從小到大順序輸出。但是ie8以下瀏覽器會按照我們輸出的順序輸出。

例如:

a = {
'1' : 1,
'5' : function(){console.log(12)},
'2' : 'abc',
'4' : [1,2,3],
'3' : {'5' : 'abc', '6' : 'bcd'},
};
登入後複製

   

通過for in循環

for(var i in a){
console.log(a[i]);
}
登入後複製

   

,, 1, 2, 3],function();

ie8以及以下瀏覽器:1,function(),abc,[1, 2, 3],Object { 5="abc", 6="bcd"};

解決這樣的問題有兩種:

第一:就是把數字的鍵值改成字串形式的包括字母或者下劃線;

第二:就是解決ie的兼容性,透過先遍歷json然後把鍵值存入一個數組中,然後再透過數組排序來循環數組取json中的資料。

具體程式碼:

var arr = [],sortNumber = function (a,b){
return a - b;
};
for(var i in a){
arr[arr.length] = a[i];
arr.sort(sortNumber);
for(var x = 0; x < arr.length; x++) {
console.log(a[arr[x]]);
}
登入後複製

   

瀏覽器讀取的資料就會保持一致了,有個缺點就是這個也不會按照我們輸出的json格式輸出,只是解決了瀏覽器的兼容問題。


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!