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;
};