通常,我们在生活中使用的应用产品(无论是 Web应用还是 App 应用),又或者我们平常的信息交流,均无可避免的存在着信息交互,在信息交互的过程中就有着信息载体的存在。那么,在我们熟知的网络应用产品中,数据是以什么样的形式传递的呢?我在日常的测试开发工作中经常接触的常见的数据传递方式有 JSON、XML、文本文件 等,XML大家都比较熟悉,JSON又是什么呢?跟 XML 的区别又有什么区别呢,请看下文。

一、JSON概述

JSON,英文名称是:JavaScript Object Notation,是一种轻量级的数据交换格式,是基于 ECMAScript 的一个子集。JSON 采用完全独立于语言的文本格式,因而其能被 C、C#、Java、JavaScript、Python 等大多数的编程语言所支持,因而使 JSON 成为比较理想的数据交换语言。易于程序阅读和编写,同时也易于机器解析和生成(一定程度上可提高网络传输速率)。

二、JSON基本结构

通常 JSON 有两种基本结构:

对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理 解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。

数组:数组在js中是中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

由以上两种基本结构就可组成比较复杂的 JSON 数据结构了,以满足不同的数据传输需求。

  
三、JSON编写规则
由 JSON 的英文全称中可以看出,其语法是 JavaScript 对象表示语法的子集,对应的语法有如下所示的规则限制:
  • 数据在键值对中
  • 键值由冒号分隔
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

四、与XML优缺点对比

JSON与XML优缺点对比
  JSON XML
优点 1、数据格式比较简单,易于读写,格式都是压缩的,耗费网络资源少(带宽);
2、易解析。客户端 JS 可以简单的通过 eval() 对 JSON 数据的读取,其他语言均有对应的模块方便解析;
3、支持多种语言,包括 C#, Java, JS, PHP, Python 等服务器端语言,便于服务器端及客户端的解析;
4、因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。

1、格式统一,符合标准

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

缺点

1、没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性;

2、JSON格式目前在Web Service中推广时间不长,不过随着时间的推移 JSON 或许会被广泛的应用。

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

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

3、服务端、客户端需编写大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护,同时浪费的较多的资源和时间。

 
可读性 基本相同,一边是建议的语法,一边是规范的标签形式。相对而言,XML可读性较好些。
可扩展性 均具备良好的扩展性
编写难度 JSON相对于 XML 更容易编写
解析难度 JSON更容易解析,无需考虑父子节点等问题,而 XML 解析时需要考虑父子节点的问题,解析难度稍大。
数据大小 JSON比 XML 更小,因 XML 中包含了各种标签符号等
数据交互 在网页编程中,JSON 与 JS 交互更加方便,更加容易解析处理,有更好的数据交互体验。
数据描述 XML 比 JSON 有更好的描述性。
传输速率 JSON快,因其大小较小,占用的带宽小,更易传输。
编码方面 JSON解析比 XML 更加方便,同时也更有利于服务端和客户端的数据解析
使用占比 XML推广的较早,占比稍大;JSON 逐渐被广大的攻城狮所接受  

五、实例对比

JSON实例如下所示:

{
country: {
name: "中国",
provinces: [{
name: "山东",
citys: {
city: ["青岛","济南"]
}
},
{
name: "上海",
citys: {
city: ["静安","徐汇","浦东"]
}
},
{
name: "江苏",
citys: {
city: ["南京","江阴"]
}
},
{
name: "广西",
citys: {
city: ["桂林","南宁"]
}
}]
}
}

XML实例如下所示:

<?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>
<city>南宁</city>
</citys>
</province>
</country>

至此, Java学习-027-JSON 之一 -- 初识 顺利完结,希望此文能够给初学 Java 的您一份参考。

最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^

Java学习-027-JSON 之一 -- 初识的更多相关文章

  1. java学习之JSON

    0X00前言 JSON可以说是javascript的一种数据类型,我们学习JSON是为了在客户端的数据给读取出来,官方的解释是:概述:JSON(JavaScript Object Notation, ...

  2. JAVA学习第一课(初识JAVA)

    PS:退ACM集训队了,自己也疯玩了两天,后天就开学了,就正式大二了,该收收心好好学习啦                                                         ...

  3. Java 学习笔记之 JVM初识

    JVM初识: java只是启动JVM的命令.JVM真实位置: C:\Program Files\Java\jdk1.8.0_121\jre\bin\server\jvm.dll 1. 第一行JDK版本 ...

  4. Java学习笔记-Json

    //先导入gson到lib,add build path //2015年5月5日22:02:37 package com.alfredsun.thread; import com.google.gso ...

  5. Java学习-029-JSON 之三 -- 模仿 cssSelector 封装读取 JSON 数据方法

    前文简单介绍了如何通过 json-20141113.jar 提供的功能获取 JSON 的数据,敬请参阅:Java学习-028-JSON 之二 -- 数据读取. 了解学习过 JQuery 的朋友都知道, ...

  6. Java学习笔记心得——初识Java

    初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开 ...

  7. [Java学习] JSON工具学习记录--FastJSON

    最近做项目,总是与json打交道,在用了即可json工具后,个人认为fastJson最好用,很方便,API也清晰可见,所以记录下使用方法,给需要的人提供帮助.(部分摘抄自网络) 一.API入口 Fas ...

  8. Json学习总结(2)——Java 下的 JSON库性能比较:JSON.simple vs. GSON vs. Jackson vs. JSONP

    JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考了.我们很少会去想用到的这些JSON库到底有什么不同,但事实上它 ...

  9. Java学习笔记-文件读写和Json数组

    Java文件读写 Java中I/O流对文件的读写有很多种方法,百度后主要看了以下三种 第一种方式:使用FileWriter和FileReader,对文件内容按字符读取,代码如下 String dir ...

随机推荐

  1. java Android SDK安装与环境变量配置以及开发第一个Android程序

    JAVA的安装与环境变量的配置 1.先下载JAVA,并且安装. 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u3 ...

  2. 解决xubuntu的thunar第一次启动慢

    装了Xubuntu后,一直都挺好,只不过就是有一个问题老困扰我,就是每次开机打开thunar都是极慢的.... 一直没注意,原来也一直找不到问题,后来今天一搜,唷呵...找到了. 解决方法 thuna ...

  3. Nhibernate Case SUM

    SELECT ID END) as nbRowWithValueOf2, END) as nbRowWithValueOf3 FROM Foo GROUP BY ID queryover = quer ...

  4. JavaScript对下一个元旦倒计时,经常用于网店限时销售

    <div>距离下一个元旦还有多久:</div> <div id="timer"></div> <script type=&qu ...

  5. Samba结合AD实现域帐号认证的文件服务器

    准备一台Windows域控制器, 在Samba服务器上安装Webmin图形化管理工具, samba, krb5-user, winbind. 修改/etc/krb5.conf. [logging] d ...

  6. PAT (Advanced Level) Practise 1003 Emergency(SPFA+DFS)

    1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  7. Redis 笔记与总结3 list 类型

    redis 版本 [root@localhost ~]# redis-server --version Redis server v= sha=: malloc=jemalloc- bits= bui ...

  8. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [4] 首页 APP 接口开发方案 ③ 定时读取缓存方式

    用于 linux 执行 crontab 命令生成缓存的文件 crop.php <?php //让crontab 定时执行的脚本程序 require_once 'db.php'; require_ ...

  9. 免费手机号码归属地API查询接口和PHP使用实例分享

    免费手机号码归属地API查询接口和PHP使用实例分享 最近在做全国性的行业分类信息网站,需要用到手机号归属地显示功能,于是就穿梭于各大权威站点之间偷来了API的接口地址. 分享出来,大家可以用到就拿去 ...

  10. UDP 构建p2p打洞过程的实现原理(持续更新)

    UDP 构建p2p打洞过程的实现原理(持续更新) 发表于7个月前(2015-01-19 10:55)   阅读(433) | 评论(0) 8人收藏此文章, 我要收藏 赞0 8月22日珠海 OSC 源创 ...