XML&JSON,两种数据交换格式 简析

  • 一、简介
    • XML
    • JSON
  • 二、格式
    • XML
      • 1.格式简括
      • 2.案例
    • JSON
      • 1.格式简括
      • 2.案例
  • 三、Java解析XML详解
    • 1.文档对象 Document
    • 2.元素对象 Element
    • 3.DOM4J解析XML
      • (1)步骤
    • 4.DOM4J - XPATH解析XML
      • (1)路径表达式
      • (2)使用步骤
    • 5.解析本地案例
    • 6.解析网络案例
    • 7.面试预测
  • 四、Java生成XML
    • 1.生成XML文件
    • 2.使用XStream生成XML字符串
  • 五、Java对象与JSON对象的互转
    • Gson
    • FastJson

一、简介

XML

  • 可扩展标记语言(eXtensible Markup Language)。
1.特性(1)具有平台无关性, 是一门独立的标记语言(2)具有自我描述性
2.作用(使用场景)(1)网络数据传输(2)数据存储(3)配置文件
3.备注(1).xml文件是保存xml文件的一种方式,xml文件也可以以其他的方式存在(如 在内存中构建xml数据)(2)不要将xml语言狭义的理解为xml文件

JSON

  • JS对象简谱(JavaScript Object Notation) , 是一种轻量级的数据交换格式

二、格式

XML

1.格式简括

一般由开头的声明,和作为主体的标记、每对标记开头的属性,以及注释部分构成,如下:

<?xml version="1.0" encoding="UTF-8"?>

<标记名称></标记名称>

1.   XML文档声明<?xml version="1.0" encoding="UTF-8"?>
2.  标记 ( 元素 / 标签 / 节点) XML文档,由一个个的标记组成.语法:开始标记(开放标记): <标记名称>结束标记(闭合标记): </标记名称>标记名称: 自定义名称,必须遵循以下命名规则:1.名称可以含字母、数字以及其他的字符2.名称不能以数字或者标点符号开始3.名称不能以字符 “xml”(或者 XML、Xml)开始4.名称不能包含空格,不能包含冒号(:)5.名称区分大小写标记内容:  开始标记与结束标记之间 ,是标记的内容.
3.  属性标记中的属性, 在标记开始时 描述, 由属性名和属性值 组成.格式:在开始标记中, 描述属性.可以包含0-n个属性, 每一个属性是一个键值对!属性名    不允许重复 , 键与值之间使用等号连接, 多个属性之间使用空格分割.属性值   必须被引号引住.
4.  注释注释不能写在文档文档声明前注释不能嵌套注释格式:注释开始:  <!--注释结束:  -->
5.  注意事项(1)一个XML文档中, 必须有且且仅允许有一个根标记.(2)标记可以嵌套, 但是不允许交叉.(3)标记的层级称呼 (子标记, 父标记 , 兄弟标记, 后代标记 ,祖先标记).(4)标记名称 允许重复(5)标记除了开始和结束 , 还有属性.
6.  扩展(CDATA)CDATA 是不应该由 XML 解析器解析的文本数据。像 "<" 和 "&" 字符在 XML 元素中都是非法的。"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。"&" 会产生错误,因为解析器会把该字符解释为字符实体的开始。某些文本,比如 JavaScript 代码,包含大量 "<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA。CDATA 部分中的所有内容都会被解析器忽略。CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束.

2.案例

描述一组图书books, 至少包含2本书图书book包含图书名称name图书简介info ,以及属性id <?xml version="1.0" encoding="UTF-8"?>
<books><book><name>book1</name><info></info><id></id></book><book><name>book2</name><info></info><id></id></book>
</books>

JSON

1.格式简括

一般是一个大对象,由大括号括起,内包含用英文逗号分开的表示对象属性的键值对,也可以包含与对象互相嵌套的数组

1.   对象格式
一个对象, 由一个大括号表示.括号中 描述对象的属性 . 通过键值对来描述对象的属性(可以理解为, 大括号中, 包含的是一个个的键值对.)
2.  键值对格式格式:键与值之间使用冒号连接, 多个键值对之间使用逗号分隔.键值对的键 应使用引号引住 (通常Java解析时, 键不使用引号会报错. 而JS能正确解析.)键值对的值, 可以是JS中的任意类型的数据
3.  数组格式在JSON格式中可以与对象互相嵌套[元素1,元素2...]

2.案例

{"name":"Tom","age":7,"friends":["Jack","Lucy","Mark","Smith",{"name":"teacher","info":"like plsy basketball"}],"favorite":{"name":"dog","number":"two"}}

三、Java解析XML详解

常见的解析方法一般有两种:DOM4J解析、DOM4J - XPATH解析

1.文档对象 Document

  • 指的是加载到内存的 整个XML文档.
常用方法:1. 通过文档对象, 获取XML文档中的根元素对象Element root = doc.getRootElement();2. 添加根节点Element root = doc.addElement("根节点名称");

2.元素对象 Element

  • 指的是XML文档中的单个节点.
常用方法:1. 获取节点名称String getName();2. 获取节点内容String getText();3. 设置节点内容String setText();4. 根据子节点的名称 , 获取匹配名称的第一个子节点对象.Element element(String 子节点名称);5. 获取所有的子节点对象List<Element> elements();6. 获取节点的属性值String attributeValue(String 属性名称);7. 获取子节点的内容String elementText(String 子节点名称);8. 添加子节点Element addElement(String 子节点名称);

3.DOM4J解析XML

(1)步骤

步骤:1. 引入jar文件 dom4j.jar2. 创建一个指向XML文件的输入流FileInputStream fis = new FileInputStream("xml文件的地址");3. 创建一个XML读取工具对象SAXReader sr = new SAXReader();4. 使用读取工具对象, 读取XML文档的输入流 , 并得到文档对象Document doc = sr.read(fis);  5. 通过文档对象, 获取XML文档中的根元素对象Element root = doc.getRootElement();

4.DOM4J - XPATH解析XML

(1)路径表达式

  • 通过路径快速的查找一个或一组元素
路径表达式:
(1)  /  :  从根节点开始查找
(2) //  :  从发起查找的节点位置 查找后代节点 ***
(3)  .  :  查找当前节点
(4) ..  :  查找父节点
(5) @   :  选择属性. * 属性使用方式:[@属性名='值'][@属性名>'值'][@属性名<'值'][@属性名!='值']books:  路径: //book[@id='1']//namebooksbook id=1nameinfobook id=2nameinfo

(2)使用步骤

通过Node类的两个方法, 来完成查找:
(Node是 Document 与 Element 的父接口)方法1.  //根据路径表达式, 查找匹配的单个节点Element e = selectSingleNode("路径表达式");方法2.List<Element> es = selectNodes("路径表达式");
案例:String phone = "12345678910";//1.  获取到XML资源的输入流URL url = new URL("http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");URLConnection conn = url.openConnection();InputStream is = conn.getInputStream();//2.  创建一个XML读取对象SAXReader sr = new SAXReader();//3.  通过读取对象 读取XML数据,并返回文档对象Document doc = sr.read(is);Node node = doc.selectSingleNode("//company");System.out.println("运营商:"+node.getText());is.close();

5.解析本地案例

 //1.  获取文件的输入流FileInputStream fis = newFileInputStream("C:\\code\\35\\code1\\day03_XML\\src\\books.xml");//2.  创建XML读取工具对象SAXReader sr = new SAXReader();//3.  通过读取工具, 读取XML文档的输入流 , 并得到文档对象Document doc = sr.read(fis);//4.  通过文档对象 , 获取文档的根节点对象Element root = doc.getRootElement();//5.  通过根节点, 获取所有子节点List<Element> es = root.elements();//6.  循环遍历三个bookfor (Element e : es) {//1.  获取id属性值String id = e.attributeValue("id");//2.  获取子节点name , 并获取它的内容String name = e.element("name").getText();//3.  获取子节点info , 并获取它的内容String info = e.element("info").getText();System.out.println("id="+id+",name="+name+",info="+info);}

6.解析网络案例

   String phone = "18516955565";//1.  获取到XML资源的输入流URL url = new URL("http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");URLConnection conn = url.openConnection();InputStream is = conn.getInputStream();//2.  创建一个XML读取对象SAXReader sr = new SAXReader();//3.  通过读取对象 读取XML数据,并返回文档对象Document doc = sr.read(is);//4.  获取根节点Element root = doc.getRootElement();//5.  解析内容String code = root.elementText("resultcode");if("200".equals(code)){Element result = root.element("result");String province = result.elementText("province");String city = result.elementText("city");if(province.equals(city)){System.out.println("手机号码归属地为:"+city);}else{System.out.println("手机号码归属地为:"+province+" "+city);}}else{System.out.println("请输入正确的手机号码");}

7.面试预测

问: Java中有几种XML解析方式 ? 分别是什么 ? 有什么样的优缺点 ?
答: 四种:SAX解析、DOM解析、JDOM解析、DOM4J解析1. SAX解析解析方式是事件驱动机制 !SAX解析器, 逐行读取XML文件解析 , 每当解析到一个标签的开始/结束/内容/属性时,触发事件.我们可以编写程序在这些事件发生时, 进行相应的处理.优点:分析能够立即开始,而不是等待所有的数据被处理逐行加载,节省内存.有助于解析大于系统内存的文档有时不必解析整个文档,它可以在某个条件得到满足时停止解析.缺点:1. 单向解析,无法定位文档层次,无法同时访问同一文档的不同部分数据(因为逐行解析, 当解析第n行是, 第n-1行已经被释放了, 无法在进行操作了).2. 无法得知事件发生时元素的层次, 只能自己维护节点的父/子关系.3. 只读解析方式, 无法修改XML文档的内容.2. DOM解析是用与平台和语言无关的方式表示XML文档的官方W3C标准,分析该结构通常需要加载整个文档和内存中建立文档树模型.程序员可以通过操作文档树, 来完成数据的获取 修改 删除等.优点:文档在内存中加载, 允许对数据和结构做出更改.访问是双向的,可以在任何时候在树中双向解析数据。缺点:文档全部加载在内存中 , 消耗资源大.3. JDOM解析目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型,JDOM一直得到大力推广和促进。JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学习曲线假定为20%)优点:使用具体类而不是接口,简化了DOM的API。大量使用了Java集合类,方便了Java开发人员。缺点:没有较好的灵活性。性能不是那么优异。4. DOM4J解析它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,
包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,DOM4J是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,
同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML。目前许多开源项目中大量采用DOM4J , 例如:Hibernate

四、Java生成XML

1.生成XML文件

步骤:1. 通过文档帮助器 (DocumentHelper) , 创建空的文档对象Document doc = DocumentHelper.createDocument();2. 通过文档对象, 向其中添加根节点Element root = doc.addElement("根节点名称");3. 通过根节点对象root , 丰富我们的子节点Element e = root.addElement("元素名称");4. 创建一个文件输出流 ,用于存储XML文件FileOutputStream fos = new FileOutputStream("要存储的位置");5. 将文件输出流, 转换为XML文档输出流XMLWriter xw = new XMLWriter(fos); 6. 写出文档xw.write(doc);7. 释放资源xw.close();案例://1.  通过文档帮助器, 创建空的文档对象Document doc = DocumentHelper.createDocument();//2.  向文档对象中, 加入根节点对象Element books = doc.addElement("books");//3.  向根节点中 丰富子节点for(int i=0;i<1000;i++) {//向根节点中加入1000个book节点.Element book = books.addElement("book");//向book节点, 加入id属性book.addAttribute("id", 1+i+"");//向book节点中加入name和info节点Element name = book.addElement("name");Element info = book.addElement("info");name.setText("苹果"+i);info.setText("哈哈哈"+i);}//4.  创建文件的输出流FileOutputStream fos = new FileOutputStream("c:\\books.xml");//5.  将文件输出流 , 转换为XML文档输出流XMLWriter xw = new XMLWriter(fos);//6.  写出XML文档xw.write(doc);//7.  释放资源xw.close();System.out.println("代码执行完毕");

2.使用XStream生成XML字符串

  • 快速的将Java中的对象, 转换为 XML字符串.
使用步骤:1. 创建XStream 对象XStream x = new XStream();[2].修改类生成的节点名称 (默认节点名称为 包名.类名)x.alias("节点名称",类名.class);3. 传入对象 , 生成XML字符串String xml字符串 = x.toXML(对象);案例:Person p = new Person(1001, "zsz", "不详");XStream x = new XStream();x.alias("haha", Person.class);String xml = x.toXML(p);System.out.println(xml);

五、Java对象与JSON对象的互转

即,
将Java中的对象 快速的转换为 JSON格式的字符串.
将JSON格式的字符串, 转换为Java的对象.
常见的方式有两种:Gson、FastJson

Gson

  • 将对象转换为JSON字符串
转换JSON字符串的步骤:1.  引入JAR包2.  在需要转换JSON字符串的位置编写如下代码即可:String json = new Gson().toJSON(要转换的对象);案例:Book b = BookDao.find();String json = new Gson().toJson(b);System.out.println(json);
  • 将JSON字符串转换为对象
JSON字符串转换对象的步骤:1.  引入JAR包2.  在需要转换Java对象的位置, 编写如下代码:对象 = new Gson().fromJson(JSON字符串,对象类型.class);案例:String json =  "{\"id\":1,\"name\":\"book\",\"author\":\"zsz\",\"info\":\"do something\",\"price\":0.1}";Book book = new Gson().fromJson(json, Book.class);System.out.println(book);

FastJson

  • 将对象转换为JSON字符串
转换JSON字符串的步骤:1.  引入JAR包2.  在需要转换JSON字符串的位置编写如下代码即可:String json=JSON.toJSONString(要转换的对象);案例:Book b = BookDao.find();String json=JSON.toJSONString(b);System.out.println(json);
  • 将JSON字符串转换为对象
JSON字符串转换对象的步骤:1.  引入JAR包2.  在需要转换Java对象的位置, 编写如下代码:类型 对象名=JSON.parseObject(JSON字符串, 类型.class);或List<类型> list=JSON.parseArray(JSON字符串,类型.class);案例:String json = "{\"id\":1,\"name\":\"book\",\"author\":\"zsz\",\"info\":\"do something\",\"price\":0.1}";Book book = JSON.parseObject(json, Book.class);System.out.println(book);

XML和JSON-自我小结相关推荐

  1. 【科普】:10分钟看明白XML和JSON

    引言 NOKIA 有句著名的广告语:"科技以人为本".任何技术都是为了满足人的生产生活需要而产生的.具体到小小的一个手机,里面蕴含的技术也是浩如烟海,是几千年来人类科技的结晶,单个 ...

  2. JavaSE——XML与JSON(语法格式、解析内容)

    第6节 XML与JSON 一.XML 1.1 XML简介 XML全称为可扩展标记语言(extensible Markup Language) . 特性: xml具有平台无关性,是一门独立的标记语言: ...

  3. xml 以及JSON学习记录

    XML 与 JSON 笔记 一.xml 部分 二. json部分 一.xml 部分 1.xml  简介 XML是Extensible Markup Language的缩写,即可扩展标记语言.它是一种具 ...

  4. XML 与 JSON 解析教程

    目录 前言 一.XML 是什么? 1.1 简介 1.2 为什么要学习 XML? 1.3 XML 文件 1.4 XML 语法格式 二.JSON 2.1 简介 2.2 对象格式 2.3 数组格式 2.4 ...

  5. XML与JSON的生成与解析

    1. XML 1.1 XML简介 可标记语言(extensible Markup Language) 特性: XML具有平台无关性,是一门独立的语言 XML具有自我描述性 XML功能: 网络传输文件 ...

  6. XML与JSON比较,并用AJAX传输XML/JSON数据

    为实现数据与逻辑代码的分离,可以把数据单独存放,一般用xml 和json格式来存储数据. XML介绍 XML 指可扩展标记语言(EXtensible Markup Language),很类似 HTML ...

  7. XML与JSON(超级详解)

    XML与JSON 文章目录 XML与JSON 前言 一.XML简介 1.1.XML是什么? 1.2.为什么学习XML 1.3.XML文件 1.4.XML语法格式 1.5.语法进阶CDATA (了解) ...

  8. XML与JSON 及其对应的Java包 Gson FastJson

    4-8 XML与JSON XML概述 可扩展标记语言: xml与平台无关,是一门独立的标记语言.与任何编程语言无关. xml具有自我描述性,能够清晰地展现其特性. xml数据不一定是文件形式存储,也可 ...

  9. XML和JSON(知识点整理)

    文章目录 XML与JSON XML XML文件 XML语法格式 语法进阶CDATA(了解) Java解析XML(掌握) DOM4J解析XML 文档对象Document 元素对象Element 解析本地 ...

最新文章

  1. 记一次通过c#运用GraphQL调用Github api
  2. eScan Internet Security Suite 2006
  3. java 上传超时_上传视频超时
  4. Python基础day03【字符串(定义、输入输出、常用方法)、列表(定义、基本使用、增删改查、嵌套)、元组】
  5. 一步一步理解GB、GBDT、xgboost
  6. Java LinkedList void add(int index,Object o)方法,带示例
  7. Oracle EBS:追踪PO全过程
  8. 皮线光缆和预制成端皮线光缆招标采购技术标准
  9. 电脑上怎么批量压缩图片?如何快速批量压缩图片?
  10. 微信公众号、微信小程序的详细介绍
  11. 世界500强企业名称中英对照
  12. 饥荒控制台输入没用_《饥荒》控制台秘籍使用方法
  13. C语言if的所有用法,关于if的用法
  14. 鲁大师升级“Pro”,2B领域谋篇布局
  15. finclip设计指南与小程序设计指南
  16. Gmap.net搜集
  17. V2X-Hub,车路协同云控平台
  18. 6GK5116-0BA00-2AB2的技术参数说明
  19. 7-2 求一元二次方程的根
  20. 【云原生|Docker】Docker镜像操作

热门文章

  1. 操作系统文件存储空间管理(存储空间的划分与初始化)
  2. GIS-地理信息系统
  3. 用树莓派组装了一台电脑
  4. kobject(转载)
  5. 腾讯数据科学家详解用户选择行为分析核心模型
  6. python画流星_幻光流星
  7. GAMES101 作业0 环境配置 超详细小白教程
  8. SQL 各种锁等待类型 wait type--sys.dm_os_wait_stats 表
  9. androidP 对反射的限制之黑名单机制
  10. java怎么把数据返回给客户端_java 服务器怎样给客户端传输数据