js解析php返回的json數據無法獲取length的問題分析


1.問題出現的過程,js解析php json_encode 的數據,無法獲取長度信息,提示undefined
 
debug:
 
    首先打印查看了php encode后的數據,返現最外層是一個中括號,誤以為編碼成了一個數組,於是將其強制類型轉換為Object ,但是長度依然undefined
 
     在同樣是解析json的話題ppt頁面,控制台打印json,發現有一個length的屬性,起初以為是在php端加到數組中的,查看后發現並非如此,於是乎stackoverflow上查詢得知,要想有此屬性,必須是一個json數組而非一個json對象。
 
     所以,正常的json_encode方法得到的數據是沒有問題的,真正造成解析json報錯的原因是數組數據中包含了無法解析的字符 換行符\n
 
 
2.php json_encode方法
 
數組鍵值對js parseJSON的影響
1>測試數據:
$data = ["2"=>["name"=>"wwww","data"=>"cccc"],"1"=>["name"=>"xxx","data"=>"ttt"]];
 
encode后:
 
{
"1": {
"name": "xxx",
"data": "ttt"
},
"2": {
"name": "wwww",
"data": "cccc"
}
}
 
$.parseJSON結果
 
2>測試數據
 
$data = [“0"=>["name"=>"wwww","data"=>"cccc"],"1"=>["name"=>"xxx","data"=>"ttt"]];
[
{
   "name": "wwww",
"data": "cccc"
},
{
"name": "xxx",
"data": "ttt"
}
]
 
$.parseJSON結果
 
 
 
可以看出來下標從0開始的數組encode之后是一個json數組,有length屬性
下標非從0開始的任意鍵值的數組encode之后是一個json對象,無length屬性
 
對於鍵值混亂的數組json_encode之后想要通過js獲取對象的長度可以使用如下方法:
 
 var getLength = function(obj) {
    var i = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)){
            i++;
        }
    }
    return i;
};
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM