Java中的数据传输格式JSON和XML

导读:本篇文章讲解 Java中的数据传输格式JSON和XML,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

在网络层,客户端和服务端建立连接之后就可以传输数据。传输数据的时候,为了双方都可以识别,需要拟定一个双方都能解析的数据交互格式。

数据传输格式

从物理本质上来说,网络传输其实是通过一系列的线路经过电路调整变化,依据网络传输协议进行通信的过程。java中常用的数据传输格式有 JSON 、 XML、HTML 、YML等(前两者比较多见)。

数据传输需要考虑到以下问题:

  1. 网络数据大小
    网络数据的大小影响带宽的占用,当服务器承受高并发的数据传输时,网络流量会达到峰值(过大会占满带宽)影响服务器的使用效率和用户体验,所以数据传输过程中,应尽量减少冗余数据,节省带宽,提高传输效率。

  2. 网络数据安全性
    客户端和服务器交互的大多数数据都是对外界隐藏的,所以网络传输过程中的选择数据格式要考虑数据安全性。

  3. 实现复杂度
    数据传输过程中需要对信息进行序列化和反序列化 ,实际开发中也要注意数据结构的可扩展性和可维护性。

  4. 协议通用性
    通常情况下,客户端和服务端处于不同的运行环境下,因此传输的数据要具备跨平台的特性,能够实现同步平台之间的跨平台通信。

JSON

概念

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。JSON采用兼容性很高的、完全独立于编程语言的文本格式,对众多编程语言比较友好(兼容性),同时也具备类似于C语言(包括C, C++, C#, Java, JavaScript, Perl, Python等)的习惯体系的行为。这些特性使JSON成为理想的数据交换语言。
JSON基于JavaScript Programming Language , Standard ECMA-262 3rd Edition – December 1999 的一个子集。

语法特征

  • 数据都是以键值对的形式表示,用冒号隔开
  • 数据之间用逗号隔开
  • 大括号保存JSON对象,对象内可有多个键值对
  • 中括号保存JSON数组,数组内可有多个对象

优点

  • 具有自我描述性(数据格式比较简单),易于读写,格式都是压缩的,占用带宽小。易于解析与生成 。
  • 使用Javascript语法来描述数据对象,但是JSON仍然独立于编程语言和平台。JSON解析器和JSON库支持许多不同的编程语言
  • JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。
  • 可以用JSON传输一个简单的String,Number,Boolean,也可以传输一个数组,或者一个复杂的Object对象。
    在这里插入图片描述

Java中JSON的解析

JSON官网给出多种JSON构造和解析工具:org.json和Json-lib。同时也有一些开源(解析)库提供,例如Google的Gson、阿里的Fastjson以及Spring框架默认的Jackson等等,此处不多讲。

XML

概念

XML(Extensible Markup Language)可扩展标记语言。XML是当前编程中最为流行的数据交换格式,拥有跨平台、跨语言的优势。用于标记文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,能对具结构性的文件进行标记,可以对文档和数据进行结构化处理。XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。通过XML可以更准确地搜索,更好地描述一些事物,更方便地传输或存储数据。主要用于描述数据和用作配置文件。
XML是标准通用标记语言 (SGML) 的子集,非常适合Web传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

语法特征

  • 首行是 XML 声明:<?xml version=”1.0″ encoding=”UTF-8″?>,它定义 XML 的版本 (1.0) 和所使用的编码 。
  • 在XML中数据都是放在一对标签内,标签名可以随意写。
  • XML 文档形成一种树结构。必须包含根元素,该元素是所有其他元素的父元素。它的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。

优点

  • 格式统一,符合标准。
  • XML文档通过纯文本的形式进行存储,独立于硬件或者软件,数据共享更加容易。
  • XML文档可以很容易地在不同的平台间传输数据,具有很好平台兼容性,同时降低数据交换复杂性,更容易扩展。

缺点

  • XML文档庞大,文件格式复杂,传输占带宽。
  • 服务器端和客户端都需要花费资源和时间来解析XML文档,导致服务器端和客户端代码变得复杂且不易维护。

Java中XML的解析

XML的解析更复杂些,选择最适合的第三方支持的解析库,选择最佳的方式可以提高解析效率。可以借助JAXB技术。

JSON和XML的区别

可读性(描述性)

两者都具备很好的可读性,JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,XML可读性相对较好些。JSON对数据的描述性比XML较差。

可扩展性

两者同样都具备很好的扩展性,但是XML的扩展性是有局限的,XML内元素变得意味着其解析代码也要变化。JSON的扩展性不受约束。

编解码难度(解析手段)

JSON和XML同样拥有丰富的解析手段。XML已经流行了好多年,拥有丰富的编码工具。在Java中既可以用JAXB,又可以用XmlBeans,又或者dom4j、jdom等把数据写到xml文档中。当然JSON也有丰富的解析库,例如JSON官网提供的json.org和Json-lib,Google的Gson、阿里的Fastjson以及Spring框架默认的Jackson等。

数据体积及传输效率

JSON相对于XML来讲,数据的体积小,传输速度更快些。

数据交互

JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。

XML与JSON数据格式比较

关于轻量级和重量级

轻量级和重量级是相对来说的,那么XML相对于JSON的重量级体现在哪呢?体现在解析方面,XML目前设计了两种解析方式:DOM和 SAX。

  • DOM是把一个数据交换格式XML看成一个DOM对象,需要把XML文件整个读入内存,这一点上JSON和XML的原理是一样的,但是XML要考虑父节点和子节点,这一点上JSON的解析难度要小很多,因为JSON构建于两种结构:key/value,键值对的集合;值的有序集合,可理解为数组;
  • SAX不需要整个读入文档就可以对解析出的内容进行处理,是一种逐步解析的方法。程序也可以随时终止解析。这样,一个大的文档就可以逐步的、一点一点的展现出来,所以SAX适合于大规模的解析。这一点,JSON目前是做不到得。

所以,JSON和XML的轻/重量级的区别在于:
JSON只提供整体解析方案,而这种方法只在解析较少的数据时才能起到良好的效果;XML提供了对大规模数据的逐步解析方案,这种方案很适合于对大量数据的处理。

关于数据格式编码及解析难度

  1. 编码方面
    虽然XML和JSON都有各自的编码工具,但是JSON的编码要比XML简单,即使不借助工具,也可以写出JSON代码,但要写出好的 XML代码就有点困难;与XML一样,JSON也是基于文本的,且它们都使用Unicode编码,且其与数据交换格式XML一样具有可读性。
    主观上来看,JSON更为清晰且冗余更少些。JSON网站提供了对JSON语法的严格描述,只是描述较简短。从总体来看,XML比较适合于标记文档,而JSON却更适于进行数据交换处理。
  2. 在解析方面。
    在普通的web应用领域,开发者经常为XML的解析伤脑筋,无论是服务器端生成或处理XML,还是客户端用 JavaScript 解析XML,都常常导致复杂的代码,极低的开发效率。
    数据交换格式JSON 提供了更好的简单性和灵活性。在Web Serivice应用中,至少就目前来说XML仍有不可动摇的地位。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/78219.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!