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 function调用时的参数检测常用办法
Feb 26 Javascript
js面向对象 多种创建对象方法小结
May 21 Javascript
JSON+HTML实现国家省市联动选择效果
May 18 Javascript
AngularJs directive详解及示例代码
Sep 01 Javascript
js实现时间轴自动排列效果
Mar 09 Javascript
基于JavaScript实现淘宝商品广告效果
Aug 10 Javascript
jquery ajax异步提交表单数据的方法
Oct 27 jQuery
Vue 第三方字体图标引入 Font Awesome的方法
Sep 28 Javascript
微信上传视频文件提示(推荐)
Nov 22 Javascript
js动态获取时间的方法分析
Aug 02 Javascript
解决layui 三级联动下拉框更新时回显的问题
Sep 03 Javascript
小程序调用微信支付的方法
Sep 26 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
用Socket发送电子邮件
2006/10/09 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
ClearTimeout消除闪动实例代码
2016/02/29 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
微信小程序 解决swiper不显示图片的方法
2017/01/04 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
JS实现隔行换色的表格排序
2017/03/27 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
微信小程序基于canvas渐变实现的彩虹效果示例
2019/05/03 Javascript
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
python处理PHP数组文本文件实例
2014/09/18 Python
关于python pyqt5安装失败问题的解决方法
2017/08/08 Python
Python设计模式之门面模式简单示例
2018/01/09 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
python获取地震信息 微信实时推送
2019/06/18 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
英国领先的游戏零售商:GAME
2019/09/24 全球购物
施工人员岗位职责
2013/12/12 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
导游词之嵊泗列岛
2019/10/30 职场文书
golang如何去除多余空白字符(含制表符)
2021/04/25 Golang
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript
Python  序列化反序列化和异常处理的问题小结
2022/12/24 Python