JSON,XML设计模式详解-程序员宅基地

技术标签: java  json  设计模式  

JSON在Java中的应用:

Json概念:

  1. json 是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式用来存储和表示数据。JSON的语言简洁清晰,广为大众所欢迎,是一种理想的数据交换语言,便于人们阅读和理解,同时也易于机器解析和生成。能够有效的提高网络传输速率 。

  2. 语法:

              JSON只定义了两种数据结构,即数组对象。对象是一组键值对。(key — value 或 name — value ) 。数组是值的列表。JSON 共有7 种类型,分别是:

           字符串、数字、对象、数组、 true 、 false 、 null 。下面简单介绍JSON数据对象的基本格式:

{
   "firstName": "Duke",
   "lastName": "Java",
   "age": 18,
   "streetAddress": "100 Internet Dr",
   "city": "JavaTown",
   "state": "JA",
   "postalCode": "12345",
   "phoneNumbers": [
      { "Mobile": "111-111-1111" },
      { "Home": "222-222-2222" }
   ]

            3 :JSON经常被用作进行序列化反序列化数据的应用中彼此通信的网络。

          4 :   如何解析和生成JSON数据,有两种编程模型:

                 首先:

                   (1): 该对象模型创建的树 , 它表示存储器在 JSON 数据。然后可以在树中导航、分析或修改。该方法是最灵活的处理和用于允许访问该内容的完整的树。然而 , 通常慢于流模型 , 需要更多存储器。在生成 JSON 对象模型输出的导航整个树。    

 

                   (2) 在流式模型采用基于事件的解析器读取 JSON 数据的每一个元素。该解析器产生事件或者停止进程当一个对象或者一个数组开始或者结束的时候, 当找到了键值对的键,或者找到了键值对的值时。每个数据元素都可以被应用代码加工或者丢弃 , 然后解析器和继续处理到下一事件。用这种方法就可以进行本地处理 , 其中处理元件的不需要的信息的数据。在流式模型生成 JSON 输出到给定流的功能调用的一个元素。

JSON 在java 中的接口和类:

  1. javax.json包中: 以下是相关的对json进行数据处理的相关的包。

 

           

Json
包含用于创建 JSON 解析器、构建器和生成器的实例的静态方法。此类还包含创建解析器、生成器和生成器工厂对象的方法。
JsonReader 从流中读取 JSON 数据, 并在内存中创建对象模型。
JsonObjectBuilder, JsonArrayBuilder 通过添加应用程序代码中的元素, 在内存中创建对象模型或数组模型。 JsonWriter 将对象模型从内存写入流。
JsonValue 表示 JSON 数据中的元素 (如对象、数组或值)。 JsonStructure
表示 JSON 数据中的对象或数组。此接口是JsonValue子类型. JsonObject, JsonArray 表示 JSON 数据中的对象或数组。这两个接口是JsonStructure的子类型. JsonPointer
包含在 JSON 文档中对特定目标进行操作的方法。目标可以是JsonValue、 JsonObject JsonArray对象。 JsonPatch 用于支持要应用于目标 JSON 资源的一系列操作的接口。这些操作是在 JSON 修补程序文档中定义的。 JsonMergePatch 用于支持针对 JSON 资源的更新的接口。将 JSON 修补程序文档与目标资源进行比较, 以确定要应用的特定更改操作集。 JsonString, JsonNumber 表示 JSON 数据中元素的数据类型。这两个接口是JsonValue的子类型. JsonException Json数据出现异常的类

       2 在java.json.stream中的主要类和接口:

JsonParser       表示基于事件的解析器, 该解析器可以从流或对象模型读取 JSON 数据。

JsonGenerator      一次将 JSON 数据写入流一个元素。

XML语言概述以及与JSON语言的不同(各自优缺点):

扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。

XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

xml:

(1).XML的优缺点
XML的优点
  格式统一,符合标准;
  容易与其他系统进行远程交互,数据共享比较方便。
XML的缺点
  XML文件庞大,文件格式复杂,传输占带宽;
  服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;
  客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;
  服务器端和客户端解析XML花费较多的资源和时间。

json:

在可扩展性方面,XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。

在编码难度方面,XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。

在解码难度方面,XML的解析得考虑子节点父节点,而JSON的解析难度几乎为0。json比xm更有优势

在流行度方面,XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous Javascript and JSON)了。

JSON和XML同样拥有丰富的解析手段。

JSON相对于XML来讲,数据的体积小。

JSON与JavaScript的交互更加方便。

JSON对数据的描述性比XML较差。

JSON的速度要远远快于XML。

 

转载于:https://www.cnblogs.com/taue997/p/10596416.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/diaozhen0953/article/details/102329634

智能推荐

字符集ISO-8859-1_iso-8859-1字符-程序员宅基地

文章浏览阅读968次。Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。_iso-8859-1字符

CQRS思路-程序员宅基地

文章浏览阅读89次。[code="java"]http://www.cnblogs.com/netfocus/p/5184182.html[/code]_汤雪华 阿里巴巴

毫米波点云生成论文 阅读笔记 | 3D Point Cloud Generation with Millimeter-Wave Radar_xinyu zhang-程序员宅基地

文章浏览阅读1.6k次。Kun Qian, Zhaoyuan He, Xinyu ZhangUCSDProceedings of the ACM on Interactive, Mobile, Wearable and Ubiquitous Technologies (ACM IMWUT)内容在CSDN、知乎和微信公众号同步更新Extremely low resolution due to its small form factor only generates intensity maps with strong ref_xinyu zhang

负数取模为正数_负数对正数取模-程序员宅基地

文章浏览阅读2.3k次,点赞5次,收藏5次。(a % b + b) % b_负数对正数取模

录制ios 命令行工具_录制音频的简单命令行工具-程序员宅基地

文章浏览阅读182次。录制ios 命令行工具 机器学习和自然语言处理通过给人以声音来改变我们与设备的关系。 视障人士尤其从这些技术中受益,但大多数语音银行都把那些像我的母语Odia这样说英语的人基本抛在了后面。 当泰米尔语 维基百科上的 T. Shrinivasan开创了录音机语音教学工具时 ,他可能没有意识到他的开源工具对像我这样的用户有多大用处。 我在寻找一个简单的工具,该工具可以让我在短时间内记录大量单词,..._ios语音控制录制命令

Python & C/C++联合编程实战-夏曹俊-专题视频课程-程序员宅基地

文章浏览阅读1.6k次。一 环境准备 和Python语法快速入门二 Python CTypes访问C/C++动态链接库三 Python源码跨平台的编译四 Python的C/C++扩展库_模块、函数、类扩展五 Python的多线程GIL及在web中调用ffmpeg扩展示例六 Python虚拟机定制-使用c++调用python七 基于python_qt_ffmpeg的视频播放项目示例..._c++实战项目 包含源码和视频

随便推点

javac命令和java命令_javac 和java 执行的文件名可以不一样吗-程序员宅基地

文章浏览阅读1.1k次。1、两个命令可以大写,也可以小写,因为window平台不区分大小写。2、java源文件文件名需与public类名一致,如果文件中无public类,文件名可以是任意标识符3、javac命令编译生成的class文件,有几个类就会生成几个文件4、格式:“javac –d 生成文件的保存路径 源文件路径”,建议总是写-d后面语句,好处就是如果原文件有包,会在当前目录自动生成包文件夹,如果..._javac 和java 执行的文件名可以不一样吗

@resource、@Autowired、@Service在一个接口多个实现类中的应用_@resource 接口与service-程序员宅基地

文章浏览阅读1.8w次,点赞10次,收藏15次。Spring在没有引入注解之前,传统的Spring做法是使用.xml文件来对bean进行注入,所有的内容都需要配置在.xml文件中,使配置和编程分离,却增加了可读性和复杂度。 Spring注解将复杂的配置文件用简单@xxx代替,当出现一个接口多个实现类的时候,究竟是用的哪个实现类呢?示例代码:public interface DataDao{}_@resource 接口与service

NTP相关命令解析_ntpq -p详解-程序员宅基地

文章浏览阅读1.7w次。导读由于ntp服务器时间的设置,网上错综复杂,资料很多,大家随便找个资料,这个不行,找另外的资料,总之对这个不是太了解,这里找了份资料,详细介绍了ntp。万变不离其中,明白了原理,ntp的配置就不在困难了。这里面解决了一些疑问:1.如何查看ntp是否配置成功?2.如何了解ntp列出的参数的含义?3.restrict关键字的作用是什么?# watch ntpq -_ntpq -p详解

通信原理第五、六章_将基带信号转换成极性码,映射-程序员宅基地

文章浏览阅读1.8k次。写在前面:黄色部分,p是书上有公式的要动手写的部分及对应页码文章目录第五章:基带传输系统第六章二进制:M进制:第五章:基带传输系统:波形变换–>信道–>接受滤波器–>抽样判决数字基带信号:短距离有线传输,频谱范围WB 从直流或低频延伸至若干倍1/T数字载波调制信号:无线,光纤信道,经过调制实现信号频谱搬移基带信号码型的设计原则:1.不含直流分量2.高频分量少..._将基带信号转换成极性码,映射

疱疹性结膜炎_带状疱疹经历的四个阶段 知乎-程序员宅基地

文章浏览阅读404次。疱疹性结膜炎特征为角膜上皮呈树枝状病变,与树叶的叶脉相似,末端呈球形.早期症状为异物感,流泪,畏光和结膜充血,随着反复复发,角膜知觉减退或消失,结果可能引起角膜溃疡和永久性角膜瘢痕形成. 盘状角膜炎累及角膜基质,是角膜深层的盘状局限性水肿和混浊,伴有虹膜炎,常在上皮性角膜炎后发生.盘状角膜炎可能代表机体对病毒的免疫反应.不是由反复的单纯疱疹病毒引起的不愈合或愈合极慢的上皮性缺损,被称为无痛性溃疡._带状疱疹经历的四个阶段 知乎

Sybase杂记(一)_sybase union all并排序-程序员宅基地

文章浏览阅读1.2k次。 现在网上搜索关于数据库的优化文章都是基于Oracle和MSSQL这两种数据库,而专门针对Sybase数据库却寥寥无几。虽然MSSQL和Sybase有很多相似的地方(因为两者有一定的历史渊源,我就不在这里讲了,有兴趣的可以去google上搜索):如他们都支持T-SQL(T-SQL需要帮助时,我首先会用MSSQL的帮助系统。在这里不得不说一句微软的技术支持做的是比Sybase好很多,sybase官_sybase union all并排序

推荐文章

热门文章

相关标签