• json数组对象和对象数组


    一、基础知识
    1、数据类型分为三类:
    1)标量:也就是单独的string(字符串)或者数字
    2)序列:也就是若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”
    3)映射:也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作hash(散列)或dictionary(字典),比如“首都:北京”。
    2、JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式
    规则如下:
    1)并列的数据之间用逗号(“,”)分隔
    2)映射用冒号(“:”)表示
    3)并列数据的集合(数组)用方括号("[]")表示
    4)映射的集合(对象)用大括号(“{}”)表示
    根据规则衍生的理解:
    1)数组用“[]”创建,对象用“{}”创建,并且使用Json基本都是用[]或者{}创建的数组或对象,否则一个普通的字符串是没有意义的
    2)无论是数组还是对象,之间的元素都用“,”隔开
    3)对象内部,(属性的)名称和值用“:”隔开,并且必须要用“:”隔开,不可单独存在属性名或者值;
    4)对象和数组可以互相嵌套,即数组中的一个元素可以是一个对象也可以是一个数组,同理对象中的一个属性的值可以是一个对象也可以是一个数组。

    二、事例

    1var china= {beijing:{name:"北京",area:"16000",haidian:{name:"海淀区"}}, 
       shanghai:{name:"上海",area:"10000",minhang:{name:"闵行区"}}}; 
       alert(china.beijing.haidian.name); 
       alert(china.shanghai.minhang.name); 
       分别弹出“海淀区”和“闵行区”。 
    2  var ourcountry=["北京市"],["上海市"],["合肥市","芜湖市","蚌埠市"]; 
      alert(ourcountry[2][1]); 
      弹出“芜湖市”。
    3  var zhongguo={provinces:[{name:"北京",cities:[{name:"北京市",quxian:["海淀区","朝阳区","东城区","西城区"]}]}, 
          {name:"安徽省",cities:[{name:"芜湖市",quxian:["繁昌县","芜湖县","南陵县","三山区"]},{name:"合肥市",quxian:["肥西县","蜀山区","庐阳区"]}]}, 
          "湖北省"]}; 
      var str = "中国:{
    "; 
      for(var i = 0; i < zhongguo.provinces.length; i++) 
      { 
         if(zhongguo.provinces.cities != null) 
         { 
          str += zhongguo.provinces.name + "{"; 
          for(var j = 0; j < zhongguo.provinces.cities.length; j++) 
          { 
               if(zhongguo.provinces.cities[j] != null) 
              { 
                str += zhongguo.provinces.cities[j].name + "{"; 
                for(var k = 0; k < zhongguo.provinces.cities[j].quxian.length; k++) 
                 { 
                   str += zhongguo.provinces.cities[j].quxian[k]; 
                   if(k != zhongguo.provinces.cities[j].quxian.length - 1) 
                   { 
                       str += ","; 
                   } 
                } 
                str += "}"; 
             } 
          } 
            str += "}
    "; 
         } 
     } 
     str += "}"; 
     alert(str); 
    弹出“ 
    中国:{北京{北京市{海淀区,朝阳区,东城区,西城区}}安徽省{芜湖市{繁昌县,芜湖县,南陵县,三山区}合肥市{肥西县,蜀山区,庐阳区}}} ”。 

    三、json在ajax中的应用
    客户端可以给服务器端通过地址栏或者post很容易的提交数据,但是服务器端处理完数据之后,将计算的结果信息回传给客户端时就存在了一定的难度,特别是数据量较大时。这个时候数据的格式成了关键,按照某种格式可以很方便的进行数据的组装,然后可以很方便的进行解析。使用Json便是一种很好的策略。在服务器端,按照Json的格式拼装好一个字符串,响应给客户端。客户端如何进行解析呢?一般有两种策略:

    1、直接解析
      var json = eval('(' + result + ')'); 
      result = ['a','b'];  -->“json[]”
      result = 'a':'b','c':'d'-->“json.”
      通过上面这个表达式,就完成了将服务器端响应给客户端的Json格式的字符串解析成了一个Json(格式的)对象,名称为“json”,通过“json.”或者“json[]”的方式便可进行数据访问。 
    2、间接解析
      var json = "r=" + result; 
      eval(json); 
      当然上面行代码可以合并为:eval("r=" + result); 
      通过上面的计算,也可以将服务器端响应给客户端的Json格式的字符串解析成了一个Json(格式的)对象,但是该对象名称为“r”,通过“r.”或者“r[]”的方式可进行数据访问。 

    总结:Json是一种简单的数据交换格式,它几乎可以很好的代替xml让服务器之间灵活的交换数据。 

    四、JavaScript中的数组和对象
      在JavaScript中,通常用[]创建的数据格式称为数组,用{}创建的东西称为对象。
    有一个数组a=[1,2,3,4],还有一个对象a={0:1,1:2,2:3,3:4},运行alert(a[1]),两种情况下的运行结果是相同的!这就是说,数据集合既可以用数组表示,也可以用对象表示,那么到底该用哪一种呢?
    其实数组表示有序数据的集合,而对象表示无序数据的集合。如果数据的顺序很重要,就用数组,否则就用对象。
    当然,数组和对象的另一个区别是,数组中的数据没有“名称”(name),对象中的数据有“名称”(name)。但是问题是,很多编程语言中,都有一种叫做“关联数组”(associativearray)的东西。这种数组中的数据是有名称的。比如在javascript中,可以这样定义一个对象:
    var a={"城市":"北京","面积":16800,"人口":1600};
    但是,也可以定义成一个关联数组:
    var a = new Array();
    a["城市"]="北京";
    a["面积"]=16800;
    a["人口"]=1600;
      这样一来好像数组和集合就没有区别了,其实不是,在Javascript语言中,关联数组就是对象,对象就是关联数组。通过第二种方式创建的数组和通过 []方式创建的数组是有很大的区别的,在第二个方式创建的“数组”中,也可以和第一种方式类似,通过“a.城市”来得到“北京”,“a.人口”来得到 “1600”,但是它和第一种方式创建的对象又是有区别的,通过第一种方式定义的a是没有length属性的,二通过第二种方式定义的a有,可是值为0,可见里面的差别还是有的,要想具体搞清楚,恐怕得看看底层的一些实现代码了。

      当 eval 返回的 json 值时,提示 Error: Invalid Label 摘要: 我们经常会在服务器端返回 json 格式的值,这样可以直接在脚本中当作完整的对象来使用,但是,许多新手通常都会遇到一个错误提示:Invalid Label ,这个问题通常会让人苦恼不堪,因为明明正确的 json 格式,却提示错误。如果你遇到此问题,那赶快看看本文的内容吧!
    假如你从服务器端返回的是 json 格式的字符串:
    >
    当你在脚本中用 eval 的方式运行:
    >
    这时会提示 : Error: Invalid Label
    实际上,我们的 json 格式并没有错误,只是在 eval 的时候,要把你的 json 值用 “()” 括号括起来:
    > var result = eval("(" + o.responseText + ")"); help001

    要么生,要么死
  • 相关阅读:
    c#基础加强版之方法控制流复习-3控制台打印密码
    c#基础加强版之方法控制流复习-2变量是否初始化的问题
    c#基础加强版之方法控制流复习-1关于方法的讲解
    小菜学try语句,又被trouble给catch住了
    JQuery--CSS操作
    JavaScript--DOM操作
    JavaScript--选择器
    JQuery--jQuery对象与DOM对象
    JavaScript--DOM编程
    JDBC--调用函数&存错过程
  • 原文地址:https://www.cnblogs.com/llljpf/p/6742724.html
Copyright © 2020-2023  润新知