json數組有長度json.abc.length,如果單純是json格式,那么不能直接使用json.length方式獲取長度,而應該使用其他方法。
最近在修改一個html頁面的JS的時候遍歷JSON對象,卻怎么也調試不通過。怪這個HTML網頁不知道用了什么方法禁止了js錯誤提示,剛開始的時候不知道有這個問題,用chrome的開發人員工具都沒發現錯誤,就是在獲取 json.length的時候總是undefined,所以就以為自己定義的json方法不對。折騰了一個晚上一點進展都沒有,頭都整暈了,太晚,最后失望地洗洗睡了。
第二天晚上就是不甘心這個小問題能難倒我,於是靜下心來仔細查原因。自己新建一個空的HTML文件在其中測試,發現JSON對象根本沒有length屬性,在搜索引擎查找也沒有比較權威的參考文檔提到json有這個屬性。博客也很少有提到 json.length 的。但是奇怪的是我明明記得json有length,我還用過,程序沒錯,正確運行。
那是怎么回事呢?最后看某博客一篇文章的時候回想起以前編程的細節,記得以前的json的子對象是個數組而這次的不是,這下終於恍然大悟了。
以前我使用json的這樣的結構:
var json1={"abc":[{"name":"txt1"},{"name","txt2"}]};
遍歷的方法是:
for(var i=0;i<json1.abc.length;i++){alert(json1.abc[i].name);}
這里的json1.abc是一個數組,數組是由2個子json組成的,數組是有length屬性的,所以說能工作。
而我這一次的json是這樣的:
var json2={"name":"txt1","name2":"txt2"};
而json本身沒有length屬性,所以用length屬性自然會出錯:
for(var i=0;i<json2.length;i++){alert(json2[i].text);}
那么要遍歷這樣的json怎么辦呢?這樣做:
for(var js2 in json2){
alert( js2+"="+json2[js2]);
}
既然json沒有length屬性,如果要知道他的長度怎么辦呢?很簡單,把上面的遍歷改一下就是了:
var jslength=0;
for(var js2 in json2){
jslength++;
}
把這段代碼寫成一個方法,以后調用就行了:
function getJsonLength(jsonData){
var jsonLength = 0;
for(var item in jsonData){
jsonLength++;
}
return jsonLength;
}