zoukankan      html  css  js  c++  java
  • 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报错的原因是数组数据中包含了无法解析的字符 换行符
     
     
    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;
    };
     
  • 相关阅读:
    spring+mybatis的多源数据库配置实战
    AspectJ的拓展学习--织入顺序和通知参数指定
    类Shiro权限校验框架的设计和实现(2)--对复杂权限表达式的支持
    权限系统(RBAC)的数据模型设计
    类Shiro权限校验框架的设计和实现
    springmvc简单集成shiro
    利用Aspectj实现Oval的自动参数校验
    Dubbo的全局Filter配置
    Dubbo的Filter实战--整合Oval校验框架
    Dubbo的Filter链梳理---分组可见和顺序调整
  • 原文地址:https://www.cnblogs.com/skyfynn/p/5525861.html
Copyright © 2011-2022 走看看