JSON是什么,为什么这么流行?

Wesley13
• 阅读 1052

JSON是什么,为什么这么流行?

原文:https://www.sojson.com/blog/1.html

整编:Java技术栈(公众号ID: javastack)

1

JSON是什么?

前几天分享了《Spring Boot 返回 JSON 数据,一分钟搞定!》,好些人对 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也要哭,这么和你比较你懂了吗。

最近干货分享

周末去面试,进去 5 分钟就出来了…

从 0 开始手写一个Tomcat,7 步搞定!

面试常考:Synchronized 有几种用法?

Java 11 已发布,String 还能这样玩!

Hashtable 为什么不叫 HashTable?

JSON是什么,为什么这么流行?

本文分享自微信公众号 - Java技术栈(javastack)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这