JSON是什么,为什么这么流行?
1
JSON是什么?
前几天分享了[《Spring Boot 返回 JSON 数据,一分钟搞定!》](https://mp.weixin.qq.com/s/cFztjzQttMwBQJqAowUZ2A
),好些人对 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常被用作序列化,推荐阅读:关于Java序列化你应该知道的一切。
2
如果到这里你还不明白?
JSON是什么,那么我就发大招了!
其实我在为公司面试的时候,我经常有提到,假如我不知道JSON是个什么玩意?你怎么告诉我,让我知道是个什么东西。(下面都是我的个人理解,因理解因人而异,受用即可!)
问了这么多人,其实结果不是我想要的,大多数的答案有这些。
它是前端和后台交互用的。
它是键值对的。
以上2点比较多。还有一些乱七八糟的完全偏离了JSON。那么它应该是怎样的?应该这么回答,个人认为!
首先,它只是一个字符串,它只是一个有规则的字符串。(重点)然后它的表达(表现)形式是键值对的。其实非常类似Java语言里的Map,Objective-C里的字典,其他语言都有对应的,我说实话其他语言我不知道!
我为什么用MapString泛型,因为理论上它的键值对应该都是字符串,Why?这个问题问的好,我可以这么回答你,因为它本身就是字符串。
上面说的理论上表达方式,那么实际目前我们用到的键值对支持什么呢?可以支持String、Number、Array以及Boolean、null什么的。
它的作用是用来交互的,不一定Web项目的前后端交互也可以接口,配置文件,文件存储等等都OK。目前移动端比较火,一般的项目都会用JSON来传输。
3
它能带来什么?
简洁、简单、体积小等。
上手容易,高效。
跨语言,目前移动端Android、IOS一般项目构造都是其他语言提供接口(JSON方式),移动端读取接口的方式开发。
….
4
它和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、你造吗?
5
DEMO
XML Demo
<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": [ "乌鲁木齐" ] } } ] }
6
Java常用的json库
我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式。JSON常被用作序列化,推荐阅读:关于Java序列化你应该知道的一切。
JSON官方
GSON
FastJSON
Jackson
7
总结
当项目没有你接手的时候,没有强行用XML的情况下,你就用JSON,没有其他额外强行规定的情况下,你就用JSON。
本人是在学习Elasticsearch的时候开始强度的接触JSON,可以这么给你形容,如果Elasticsearch返回的是一个XML,估计你要哭,Elasticsearch也要哭,这么和你比较你懂了吗。
原文发布时间为:2018-12-17
本文作者:Java技术栈
本文来自云栖社区合作伙伴“ Java技术栈”,了解相关信息可以关注“javastack”微信公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Flink 事件时间的陷进及解决思路
0x1 摘要 大家都知道Flink引入了事件时间(eventTime)这个重要概念,来提升数据统计的准确性,但引入事件时间后在具体业务实现时存在一些问题必需要合理去解决,否则会造成非常严重的问题。 0x2 Flink 时间概念介绍 Flink 支持不同的时间概念,包括: Event Time :事件时间 Processing Time :处理时间 Ingestion Time :消息提取时间 参考下图可以清晰的知道这三者的关系:Ingestion Time是介于Event Time和Processing Time之间的概念。程序中可以通过env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime);指定使用时间类型。 0x3 事件时间存在的问题 事件时间存在什么样的问题呢?下面先看一个简单的业务场景。比如:要统计APP上搜索按钮每1分钟的点击次数。前端埋点数据结构: 字段名 字段类型 描述 eventCode String 事件编码 clickTime Long 点击时间 基于以上数据结构我们可设计如下水印处理器:...
- 下一篇
阿里云HBase推出全新X-Pack服务 定义HBase云服务新标准
2018年12月13日,第八届中国云计算标准和应用大会在京召开,会上阿里云HBase宣布推出全新X-Pack服务,支持SQL、时序、时空、图、全文检索能力、复杂分析,从处理到分析全栈式数据库,客户开箱即用,可以满足客户对数据库更丰富的业务处理,以及更易用的需求。 同时,全新的云HBase服务具备多项独家企业级能力,包括无感知冷热分离、百TB级备份恢复,跨region双活、企业级安全,解决客户成本,安全等诸多挑战,让客户专注于业务开发。 图 阿里云ApsaraDB HBase技术负责人,中国HBase技术社区发起人之一曹龙和Apache HBase社区Committer&PMC,Ali-HBase内核负责人杨文龙共同发布 基于全新的版本,HBase的能力将全面提升一个高度,释放计算和业务的价值。 多模型支持 云HBase在KV的基础上
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度