• json数组对象和对象数组


    一、Json的简单介绍
    从结构上看,所有的数据最终都可以分成三种类型:
    第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词。
    第二种类型是sequence(序列),也就是若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”。
    第三种类型是mapping(映射),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作hash(散列)或dictionary(字典),比如“首都:北京”。
    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它的规则非常简单并且是有趣的:
    1) 并列的数据之间用逗号(“,”)分隔。
    2) 映射用冒号(“:”)表示。
    3) 并列数据的集合(数组)用方括号("[]")表示。
    4) 映射的集合(对象)用大括号(“{}”)表示。
    按照这个规则可以作以下理解:
    1.数组用“[]”创建,对象用“{}”创建,并且使用Json基本都是用[]或者{}创建的数组或对象,否则一个普通的字符串是没有意义的;
    2.无论是数组还是对象,之间的元素都用“,”隔开;
    3.对象内部,(属性的)名称和值用“:”隔开,并且必须要用“:”隔开,不可单独存在属性名或者值;
    4.对象和数组可以互相嵌套,即数组中的一个元素可以是一个对象也可以是一个数组,同理对象中的一个属性的值可以是一个对象也可以是一个数组。
    二、事例
    1.
    var 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 = "中国:{\n";
    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 += "}\n";
    }
    }
    str += "}";
    alert(str);
    弹出“
    中国:{
    北京{北京市{海淀区,朝阳区,东城区,西城区}}
    安徽省{芜湖市{繁昌县,芜湖县,南陵县,三山区}合肥市{肥西县,蜀山区,庐阳区}}
    }
    ”。
    三、Json在Ajax中的应用
    客户端可以给服务器端通过地址栏或者post很容易的提交数据,但是服务器端处理完数据之后,将计算的结果信息回传给客户端时就存在了一定的难度,特别是 数据量较大时。这个时候数据的格式成了关键,按照某种格式可以很方便的进行数据的组装,然后可以很方便的进行解析。使用Json便是一种很好的策略。在服 务器端,按照Json的格式拼装好一个字符串,响应给客户端。客户端如何进行解析呢?一般有两种策略(两种策略的名称是自己给的名字,不一定很合理,但是 思路应该是没有问题的):
    1.直接解析
    var json = eval('(' + result + ')');
    通过上面这个表达式,就完成了将服务器端响应给客户端的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 格式的值,这样可以直接在脚本中当作完整的对象来使用,但是,许多新手通常都会遇到一个错误提示: Invalid Label ,这个问题通常会让人苦恼不堪,因为明明正确的 json 格式,却提示错误。


    假如你从服务器端返回的是 json 格式的字符串:
    >
    当你在脚本中用 eval 的方式运行:
    >
    这时会提示 : Error: Invalid Label
    实际上,我们的 json 格式并没有错误,只是在 eval 的时候,要把你的 json 值用 “()” 括号括起来:
    > var result = eval("(" + o.responseText + ")"); help001

  • 相关阅读:
    【leetcode】1020. Partition Array Into Three Parts With Equal Sum
    【leetcode】572. Subtree of Another Tree
    【leetcode】123. Best Time to Buy and Sell Stock III
    【leetcode】309. Best Time to Buy and Sell Stock with Cooldown
    【leetcode】714. Best Time to Buy and Sell Stock with Transaction Fee
    【leetcode】467. Unique Substrings in Wraparound String
    【leetcode】823. Binary Trees With Factors
    【leetcode】143. Reorder List
    【leetcode】1014. Capacity To Ship Packages Within D Days
    【leetcode】1013. Pairs of Songs With Total Durations Divisible by 60
  • 原文地址:https://www.cnblogs.com/zhangji/p/2163811.html
Copyright © 2020-2023  润新知