JSON是什么?有哪些优点?JSON和XML的区别?


Posted in Javascript onApril 29, 2019

有一种叫做JSON (JavaScript Object Notation) 的轻量级数据交换格式能够替代XML的工作。它就是JSON。各语言对JSON支持的特别好,自从Ajax的流行,JSON格式传输就更流行了。

一、JSON是什么?

有一种叫做JSON (JavaScript Object Notation) 的轻量级数据交换格式能够替代XML的工作。它就是JSON。

数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小。

易于解析这种语言, 客户端JavaScript可以简单的通过eval()进行JSON数据的读取。

包括ActionScript, C, C#, ColdFusion,Java,JavaScript,Perl,PHP,Python,Ruby等语言服务器端语言, 便于服务器端的解析。

各语言对JSON支持的特别好,自从Ajax的流行,JSON格式传输就更流行了。

二、如果到这里你还不明白?JSON是什么,那么我就发大招了!

其实我在为公司面试的时候,我经常有提到,假如我不知道JSON是个什么玩意?你怎么告诉我,让我知道是个什么东西。(下面都是我的个人理解,因理解因人而异,受用即可!)

问了这么多人,其实结果不是我想要的,大多数的答案有这些。

它是前端和后台交互用的。

它是键值对的。

以上2点比较多。还有一些乱七八糟的完全偏离了JSON。

那么它应该是怎样的?应该这么回答,个人认为!

首先,它只是一个字符串,它只是一个有规则的字符串。(重点)

然后它的表达(表现)形式是键值对的。其实非常类似Java语言里的Map,Objective-C里的字典,其他语言都有对应的,我说实话其他语言我不知道!我为什么用MapString泛型,因为理论上它的键值对应该都是字符串,Why?这个问题问的好,我可以这么回答你,因为它本身就是字符串。

上面说的理论上表达方式,那么实际目前我们用到的键值对支持什么呢?可以支持String、Number、Array以及Boolean、null什么的。

它的作用是用来交互的,不一定Web项目的前后端交互也可以接口,配置文件,文件存储等等都OK。目前移动端比较火,一般的项目都会用JSON来传输。

三、它能带来什么?

简洁、简单、体积小等。

上手容易,高效。

跨语言,目前移动端Android、IOS一般项目构造都是其他语言提供接口(JSON方式),移动端读取接口的方式开发。

….

XML的优缺点

<1>.XML的优点

A.格式统一,符合标准;

B.容易与其他系统进行远程交互,数据共享比较方便。

<2>.XML的缺点

A.XML文件庞大,文件格式复杂,传输占带宽;

B.服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;

C.客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;

D.服务器端和客户端解析XML花费较多的资源和时间。

json的优缺点

<1>.JSON的优点:

A.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;

B.易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;

C.支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析;

D.在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取;

E.因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。

<2>.JSON的缺点A.没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性;

JSON格式目前在Web Service中推广还属于初级阶段。

四、它和XML对比?

可读性:看了网上的各种帖子,有说可读性相当,不过基本是说XML可读性好,我认为还凑合。可以打平手。

可扩展性:有人说,“XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。不过 JSON在Javascript主场作战,可以存储Javascript复合对象,有着XML不可比拟的优势”。我赞同一半,我觉得这些帖子都是老帖子,XML可以灵活扩展是因为各种语言有支持的其他Jar包,类库等。但自从JSON火起来后,JSON的支持包,类库等,相信每个语言都很多。像Java就有Jackson、goson、json-lib、FastJson等等多的去了。

编码难度:XML有有DOM,SAX,STAX等解析技术,JSON也有我上面说的那些,都OK。

解码难度:同上。

解码编码效率:呵呵!解析XML有专用CPU、你造吗?

下面给一个Demo

XML Demo

<?xml version="1.0" encoding="utf-8"?> 
<country> 
 <name>中国</name> 
 <province> 
 <name>黑龙江</name> 
 <citys> 
 <city>哈尔滨</city> 
 <city>大庆</city> 
 </citys> 
 </province> 
 <province> 
 <name>广东</name> 
 <citys> 
 <city>广州</city> 
 <city>深圳</city> 
 <city>珠海</city> 
 </citys> 
 </province> 
 <province> 
 <name>台湾</name> 
 <citys> 
 <city>台北</city> 
 <city>高雄</city> 
 </citys> 
 </province> 
 <province> 
 <name>新疆</name> 
 <citys> 
 <city>乌鲁木齐</city> 
 </citys> 
 </province> 
</country>

JSON Demo

{ 
 "name": "中国", 
 "province": [ { "name": "黑龙江", "citys": { "city": [ "哈尔滨", "大庆" ] } }, { "name": "广东", "citys": { "city": [ "广州", "深圳", "珠海" ] } }, { "name": "台湾",
 "citys": { "city": [ "台北", "高雄" ] } }, { "name": "新疆", "citys": { "city": [ "乌鲁木齐" ] } } ] 
}

Java常用的json库

我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式。

1、JSON官方
2、GSON
3、FastJSON
4、jackson

总结

当项目没有你接手的时候,没有强行用XML的情况下,你就用JSON,没有其他额外强行规定的情况下,你就用JSON。

本人是在学习Elasticsearch的时候开始强度的接触JSON,可以这么给你形容,如果Elasticsearch返回的是一个XML,估计你要哭,Elasticsearch也要哭,这么和你比较你懂了吗。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquerymobile checkbox及时刷新才能获取其准确值
Apr 14 Javascript
基于jquery编写的横向自适应幻灯片切换特效的实例代码
Aug 06 Javascript
js动态添加的DIV中的onclick事件简单实例
Jul 25 Javascript
js自定义QQ菜单效果
Jan 10 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
Mar 08 Javascript
JavaScript 中 apply 、call 的详解
Mar 21 Javascript
vue 强制组件重新渲染(重置)的两种方案
Oct 29 Javascript
JavaScript中的类型检查
Feb 03 Javascript
JS数组的高级使用方法示例小结
Mar 14 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
Mar 17 Javascript
JS中的继承操作实例总结
Jun 06 Javascript
js实现随机点名功能
Dec 23 Javascript
详解iframe跨域的几种常用方法(小结)
Apr 29 #Javascript
详解JS实现系统登录页的登录和验证
Apr 29 #Javascript
实例详解vue中的$root和$parent
Apr 29 #Javascript
微信网页登录逻辑与实现方法
Apr 29 #Javascript
vue和better-scroll实现列表左右联动效果详解
Apr 29 #Javascript
Vue 引入AMap高德地图的实现代码
Apr 29 #Javascript
微信小程序--获取用户地理位置名称(无须用户授权)的方法
Apr 29 #Javascript
You might like
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
自动生成文章摘要的代码[JavaScript 版本]
2007/03/20 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
使用JavaScript获取地址栏参数的方法
2014/12/19 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
javascript实现复选框全选或反选
2017/02/04 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
python搜索指定目录的方法
2015/04/29 Python
实例讲解python中的序列化知识点
2018/10/08 Python
python中的tcp示例详解
2018/12/09 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
2020/03/19 Python
浅谈pytorch中的BN层的注意事项
2020/06/23 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
Django跨域请求原理及实现代码
2020/11/14 Python
英国在线珠宝店:The Jewel Hut
2017/03/20 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
给校长的建议书600字
2014/05/15 职场文书
机电一体化专业求职信
2014/07/22 职场文书
幼儿园感谢信
2015/01/21 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers
总结python多进程multiprocessing的相关知识
2021/06/29 Python
Django路由层如何获取正确的url
2021/07/15 Python
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技