JSON数组对象和对象数组
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.对象和数组可以互相嵌套,即数组中的一个元素可以是一个对象也可以是一个数组,同理对象中的一个属性的值可以是一个对象也可以是一个数组。
二、事例
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中的应用
1> jQuery插件支持的转换方式:
代码如下:
$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr);
可以将json字符串转换成json对象
2> 浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器:
代码如下:
JSON.parse(jsonstr); //可以将json字符串转换成json对象
JSON.stringify(jsonobj); //可以将json对象转换成json对符串
注:ie8(兼容模式),ie7和ie6没有JSON对象,推荐采用JSON官方的方式,引入json.js。
3> Javascript支持的转换方式:
eval('(' + jsonstr + ')');
//可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号。
注:ie8(兼容模式),ie7和ie6也可以使用eval()将字符串转为JSON对象,但不推荐这些方式,这种方式不安全,eval会执行json串中的表达式。
4> JSON官方的转换方式:
http://www.json.org/提供了一个json.js,这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法;
可以在https://github.com/douglascrockford/JSON-js上获取到这个js,一般现在用json2.js。
本文系摘抄和整理,如有疑义可留言。