js解析php返回的json数据无法获取length的问题分析

Posted Bignerd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
};
 

以上是关于js解析php返回的json数据无法获取length的问题分析的主要内容,如果未能解决你的问题,请参考以下文章

php 怎么接收前端传来的json数据

请教php大神,如何提取一个json数据里的某值?

php将淘宝客api返回的json数据,如何输出至html

通过 Ajax 解析 PHP 文件获取的 JSON 数据时出现问题

php 怎样获取 json 返回值

html中通过js获取接口JSON格式数据解析以及跨域问题