javascript对json的操作
来源:互联网 发布:网络优化一日工作总结 编辑:程序博客网 时间:2024/06/09 12:07
由于最近需要用到js对json的操作,所有把一些在网上浏览到的一些心得总结出来。
一、Json的简单介绍
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。
从结构上看,所有的数据最终都可以分成三种类型:第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词。
第二种类型是sequence(序列),也就是若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”。
第三种类型是mapping(映射),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作hash(散列)或dictionary(字典),比如“首都:北京”。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它的规则非常简单并且是有趣的:
1) 并列的数据之间用逗号(“,”)分隔。
2) 映射用冒号(“:”)表示。
3) 并列数据的集合(数组)用方括号("[]")表示。
4) 映射的集合(对象)用大括号(“{}”)表示。
按照这个规则可以作以下理解:
1.数组用“[]”创建,对象用“{}”创建,并且使用Json基本都是用[]或者{}创建的数组或对象,否则一个普通的字符串是没有意义的;
2.无论是数组还是对象,之间的元素都用“,”隔开;
3.对象内部,(属性的)名称和值用“:”隔开,并且必须要用“:”隔开,不可单独存在属性名或者值;
4.对象和数组可以互相嵌套,即数组中的一个元素可以是一个对象也可以是一个数组,同理对象中的一个属性的值可以是一个对象也可以是一个数组。
在JSON中,有两种结构:对象和数组。
1.对象
一个对象以“{”开始,“}”结束。每个“key”后跟一“:”,“‘key/value’ 对”之间运用 “,”分隔。
packJson = {"name":"nikita", "password":"1111"}
2.数组
packJson = [{"name":"nikita", "password":"1111"}, {"name":"tony", "password":"2222"}];
数组是值的有序集合。一个数组以“[”开始,“]”结束。值之间运用 “,”分隔。
二、JSON对象和JSON字符串的转换
在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。例如:
JSON字符串:
var jsonStr = '{"name":"nikita", "password":"1111"}';
JSON对象:
var jsonObj = {"name":"nikita", "password":"1111"};
2、String转换为Json
var myObject = eval('(' + myJSONtext + ')');
eval是js自带的函数,不是很安全,可以考虑用json包。
三、遍历JSON对象
myJson = {"name":"nikita", "password":"1111"};for(var p in myJson){//遍历json对象的每个key/value对,p为key alert(p + " " + myJson[p]);}
运行结果:
四、遍历JSON数组
packJson = [{"name":"nikita", "password":"1111"},{"name":"tony", "password":"2222"}];for(var p in packJson){//遍历json数组时,这么写p为索引,0,1 alert(packJson[p].name + " " + packJson[p].password);}
我更倾向于这种写法:
for(var i = 0; i < packJson.length; i++){ alert(packJson[i].name + " " + packJson[i].password);}
运行结果:
五、将两个JSON对象组装到一个里面
//targetJson 目标JSON,packJson 被组装JSONfunction addGroupJson(targetJson, packJson){ if(targetJson && packJson){ for(var p in packJson){ targetJson[p] = packJson[p]; } }}
用法如下:
var json1 = {"name":"nikita"};var json2 = {"password":"1111"};addGroupJson(json1, json2);alert(json2str(json1));
运行结果:
六、事例
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.
<script type="text/javascript">
var jsonStr = '[{"stuName":[{"name":"Tom"},{"name":"Jack"},{"name":"jony"}],"className":[{"class":"基础日语"},{"class":"中级日语"},{"class":"Java SE"}]}]';
var jsonO = eval("("+jsonStr+")");
alert(jsonO[0].stuName[0].name);
</script>
这是js对json数组的处理。
4.
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);
弹出“
中国:{
北京{北京市{海淀区,朝阳区,东城区,西城区}}
安徽省{芜湖市{繁昌县,芜湖县,南陵县,三山区}合肥市{肥西县,蜀山区,庐阳区}}
}
”。
七、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 的方式运行:
>
这时会提示 :
实际上,我们的 json 格式并没有错误,只是在 eval 的时候,要把你的 json 值用 “()” 括号括起来:
> var result = eval("(" + o.responseText + ")"); help001
- javascript对json的操作
- javascript对json的操作
- JavaScript对JSON的操作总结
- JavaScript对JSON的解析
- python对json的操作
- java对json的操作
- js对json 的操作
- 对json的各种操作
- js对json的操作
- Python对Json的操作
- python对json的操作
- python对json的相关操作 json.dumps() json.loads()
- javascript对数据库的操作
- JavaScript对TreeView的操作
- Javascript对数组的操作
- javascript对select的操作
- javascript对select的操作
- Javascript对数组的操作
- ConcurrentHashMap 原理(1)之内部类HashEntry 、Segment
- Flex写的一个工作流设计器原型
- 书中关于convertView 和 setTag()的理解
- 【xv6学习之番外篇】Exceptions and Interrupts
- 关于找工作那些事
- javascript对json的操作
- 编译期常量的一些事儿
- unity3d之刚体碰撞器和触发器的一些知识
- bzoj 1670 Building the Moat
- Android.mk详解
- Codeforces Round #340 (Div. 2)
- contentType的所有类型
- ConcurrentHashMap原理(2)之用分离锁实现多个线程间的并发写操作
- svn的简介