javascript学习之json入门


Posted in Javascript onDecember 22, 2016

1. 什么是JSON

JSON---Javascript Object Notation,前两个单词大家应该都认识,最后一个notation,是“记号、标记法”的意思,连在一起,便成了JSON。

它是一种轻量级的数据交换格式,是基于Javascript的一个子集,可以叫做Javascript对象表示法,是存储和交换文本信息的语法,但它并不是Javascript独有的数据格式,其它很多语言都可以对JSON进行解析和序列化。

2. JSON的由来

在21世纪初,Douglas Crockford(Web开发领域最知名的技术权威之一,ECMA JavaScript2.0标准化委员会委员,被JavaScript之父Brendan Eich称为JavaScript的大宗师(Yoda),曾任Yahoo!资深JavaScript架构师,现任PayPal高级JavaScript架构师)试图寻找一种更加简便的数据交换格式,能够在服务器之间交换数据,当时通用的数据交换语言是XML,但是Douglas Crockford认为XML的生成与解析都过于麻烦,所以他提出了一种更加简化的格式,就是我们现在使用的JSON。

JSON的规格十分简单,只用一个页面几百个字就能说清楚,而且Douglas Crackford称这个规格永远不用升级,因为该规定的都已经规定好了。

3. 为什么要用JSON

JSON类似于XML,比XML更小、更快、更容易解析。但同时XML也有它的不可替代性,应根据使用场景进行更合适的选择;

JSON语法简单,很容易理解,并且对象信息自描述,数据传输量小不占用带宽;

JSON虽然远不及emoji这一世界通用语言,但其实它的支持度也已经非常可观,支持的语言包括C,C#,Java,JavaScript,PHP,Python,Ruby等等;

对于Ajax应用程序来说,JSON比XML更快捷,更易用;

JSON的可读性、可扩展性都非常好,编码难度也比较低,即使不借助工具也能写出比较规范的JSON

......

4. JSON怎么用

⑴ JSON的基本语法

① 并列的数据之间用逗号( , )分隔

② 映射用冒号( : )表示

③ 映射的集合用大括号( {} )表示

④ 并列数据的集合用方括号( [] )表示

例如:

上赛季的MVP是斯蒂芬库里,场上位置是控球后卫,球衣号码是30号,球队是金州勇士队

上赛季的FMVP是勒布朗詹姆斯,场上位置是小前锋,球衣号码是23号,球队是克里夫兰骑士队

用JSON格式就可以表示为:

[{
 "MVP":"Stephen Curry",
 "position":"Point Guard",
 "number":"30",
 "team":"Golden State Warriors"
 },{
 "FMVP":"Lebron James",
 "position":"Small Forward",
 "number":"23",
 "team":"Cleveland Cavaliers"
 }]

更复杂的数据也可以使用JSON来进行表示,比如下面这段信息:最喜欢的编辑器是sublime,最喜欢的运动是篮球,最喜欢的球队是马刺队,马刺队控卫有托尼帕克、帕蒂米尔斯,分卫有马努吉诺比利、丹尼格林,小前锋有科怀伦纳德、凯尔安德森,大前锋有拉马库斯阿尔德里奇、大卫李,中锋有德维恩戴德蒙、保罗加索尔。

{
 "favoriteEditor": "sublime",
 "favoriteSport": "basketball",
 "favoriteTeam":{
 "Spurs":[
 {
  "PG":"Tony Parker",
  "SG":"Danny Green",
  "SF":"Kawhi Leonard",
  "PF":"LaMarcus Aldridge",
  "C":"Pau Gasol" 
 },
 {
  "PG":"Patty Mills",
  "SG":"Manu Ginobili",
  "SF":"Kyle Anderson",
  "PF":"David Lee",
  "C":"Dewayne Dedmon" 
 }
 ]
 }
 }

⑵ JSON的解析与序列化

① 通过eval()函数将JSON字符串解析为JavaScript原生值

var str = '[{"name":"james","height":"203","number":"23"}, {"name":"kobe","height":"198","number":"24"}]'; //定义JSON字符串
 var oJson = eval(str); //通过eval()函数解析拿到JavaScript原生值
 //接下来便可通过JS进行操作
 alert(oJson[0].name); //james
 alert(oJson[1].height); //198

② 通过全局对象JSON的两个方法parse()和stringify()进行操作

parse()可以将JSON字符串转化为JavaScript原生值:

var str = '[{"name":"james","height":"203","number":"23"},{"name":"kobe","height":"198","number":"24"}]';  //定义JSON字符串
 var oJson = JSON.parse(str); //通过JSON对象的parse方法得到该JSON字符串的JavaScript原生值
 document.write("姓名:" + oJson[1].name + "<br/>" + "身高:" + oJson[1].height + "cm" + "<br/>" + "球衣号码:" + oJson[1].number);

javascript学习之json入门

parse()也可以传第二个参数,此时可以在还原出JavaScript值的时候将原值替换成自己想要的值,如下:

var str = '[{"name":"james","height":"203","number":"23"},{"name":"kobe","height":"198","number":"24"}]';
 var oJson = JSON.parse(str, function(key, value){
 if('name' == key){
 return '球员' + value;
 }else if('number' == key){
 return value + '号球衣';
 }else{
 return value;
 }
 });
 alert(oJson[0].name + '更牛逼还是' + oJson[1].name + '更牛逼' + '\n' + '你喜欢' + oJson[0].number + '还是' + oJson[1].number);

 javascript学习之json入门

stringify()可以将原生JavaScript值转换为JSON字符串:

var oJson = [{
 name : "james",
 height : 203,
 number : 23
 },{
 name : "kobe",
 height : 198,
 number : 24
 }];
 var jsonStr = JSON.stringify(oJson,['name','number'],4);
 alert(jsonStr);

javascript学习之json入门

JSON.stringify(oJson,['name','number'],4);中的第一个参数表示需要转化的JS对象;第二个参数用于过滤结果,表示只留下name和number,其他的key以及所对应的的value都不要了;第三个参数表示在JSON字符串中保留的缩进数,有缩进时可读性更高,该参数也可以是一个字符串,比如'----',此时弹出结果如下:

javascript学习之json入门

如果不需要保留缩进,那么最后一个参数空起来即可,但如果不需要进行过滤,第二个参数需设置为null占位,不能空起来,否则最后一个参数也会失效。

第二个参数也可以是函数,函数可以进行更加复杂的过滤:

var oJson = [{
 name : "james",
 height : 203,
 position : '小前锋'
 },{
 name : "kobe",
 height : 198,
 position : '得分后卫'
 }];
 var jsonStr = JSON.stringify(oJson,function(key,value){
 switch(key){
 case 'name':
 return '球员 ' + value;
 case 'height':
 return '身高 ' + value + 'cm';
 case 'position':
  return '位置 ' + value;
 default:
 return value;
 }
 },4);
 alert(jsonStr);

javascript学习之json入门

支持JSON对象的浏览器有IE8+、Chrome、FireFox3.5+、Opera10.5+、Safari4+,不支持的浏览器可以通过json.js这一开源库来进行模拟。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
javascript 跨浏览器开发经验总结(五) js 事件
May 19 Javascript
javascript与jquery中跳出循环的区别总结
Nov 04 Javascript
Javascript基础教程之数组 array
Jan 18 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
Nov 10 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
Dec 22 Javascript
基于jquery实现省市区三级联动效果
Dec 25 Javascript
拥有一个属于自己的javascript表单验证插件
Mar 24 Javascript
AngularJS HTML DOM详解及示例代码
Aug 17 Javascript
微信小程序 弹窗自定义实例代码
Mar 08 Javascript
Angular2使用Augury来调试Angular2程序
May 21 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
Aug 19 jQuery
在vue中读取本地Json文件的方法
Sep 06 Javascript
Bootstrap源码解读网格系统(3)
Dec 22 #Javascript
js微信支付实现代码
Dec 22 #Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
Dec 22 #Javascript
Html中 IFrame的用法及注意点
Dec 22 #Javascript
浅析JavaScript的几种Math函数,random(),ceil(),round(),floor()
Dec 22 #Javascript
BootStrap3使用错误记录及解决办法
Dec 22 #Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
Dec 22 #Javascript
You might like
PHP的开发框架的现状和展望
2007/03/16 PHP
解析php5配置使用pdo
2013/07/03 PHP
php使用base64加密解密图片示例分享
2014/01/20 PHP
php文件系统处理方法小结
2016/05/23 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
js 弹出菜单/窗口效果
2011/10/30 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
jQuery替换字符串(实例代码)
2013/11/13 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
JS中数组与对象的遍历方法实例小结
2018/08/14 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
2019/01/18 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
vue实现淘宝购物车功能
2020/04/20 Javascript
vant实现购物车功能
2020/06/29 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
Python标准库os.path包、glob包使用实例
2014/11/25 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
pandas中DataFrame修改index、columns名的方法示例
2019/08/02 Python
python多线程分块读取文件
2019/08/29 Python
Python笔记之facade模式
2019/11/20 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
自我评价范文
2013/12/22 职场文书
年度考核自我鉴定
2014/03/19 职场文书
七夕情人节促销方案
2014/06/07 职场文书
我爱幼儿园演讲稿
2014/09/11 职场文书
Python实现简单得递归下降Parser
2022/05/02 Python