js解析php返回的json数据无法获取length的问题分析
2016-05-25 09:27
846 查看
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获取对象的长度可以使用如下方法:
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; };
相关文章推荐
- yii2 实战教程之如何安装
- yii2 实战教程之如何安装
- PHP面向对象的一些基础概述
- php保留两位小数,四舍五入与否
- 关于PHP的一些常用的字符串处理函数
- 自定义ContentProvider
- 应对518PHP漏洞危机,AMH4.2无损升级PHP5.6.9傻瓜式教程!更新
- PHP 简介
- YII框架递归
- Atitit.png 图片不能显示 php环境下
- Atitit.png 图片不能显示 php环境下
- Atitit.png 图片不能显示 php环境下
- PHP内核探索
- htpot函数 ( 计算直角三角形的斜边长)
- 王帅:深入PHP内核
- 提交表单后 PHP获取提交内容的实现方法
- Yii2框架使用计划任务的方法
- yii2实现根据时间搜索的方法
- PHP cURL 笔记
- PHP内核探索之变量 图解