XML与JSON的生成与解析
1. XML
1.1 XML简介
可标记语言(extensible Markup Language)
特性:
- XML具有平台无关性,是一门独立的语言
- XML具有自我描述性
XML功能:
- 网络传输文件
- 数据存储
- 配置文件
XML文件
- .XML文件时保存XNL数据的一种方式
- XML数据也可以以其他方式存在(如再内存中构建XML数据)
- XML语言不等同于XML文件
1.2 XML文档声明
<?xml version="1.0" encoding="UTF-8"?>
1.3 标记(元素/标签/节点)
由一个个标记组成
语法:
开始标记 <标记名称>
结束标记 </标记名称>
标记命名规则:
- 名称可以含字母、数字以及其他的字符
- 数字特殊符号不能做开头
- 不能以xml开始
- 名称不能有空格,冒号
- 名称区分大小写
1.3.1 一个XML文档中,必须有且仅有一个根标记
例如:
<names><name>张三</name><name>李四</name>
</names>
标记可以重复,可以嵌套,但不能交叉
1.3.2 标记的层级称呼(子标记,父标记,兄弟标记,后代标记,祖先标记)
<persons><person><name>张三</name><age>18</age></person>
</persons>
1.3.3 标记的属性
标记中的属性在标记开始时描述,由属性名和属性值组成
格式:
在开始标记中,描述属性
可以包含0-n个属性,每一个属性是一个键值对
属性名不允许重复,键与值之间使用等号连接,多个属性之间使用空格分隔
属性值必须用引号引住
注释:
<!--xxx-->
1.3.4 CDATA
CDATA 是不应该由 XML 解析器解析的文本数据。
像 “<” 和 “&” 字符在 XML 元素中都是非法的。"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。"&" 会产生错误,因为解析器会把该字符解释为字符实体的开始。
某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。
CDATA 部分中的所有内容都会被解析器忽略。
CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束
例如:
<name><![CDATA[ 哈<a></a>哈 ]]>
</name>
1.4 DOM4J解析XML
步骤:
- 引入jar文件 dom4j.jar
- 创建一个指向XML文件的输入流
FileInputStream fis = new FileInputStream("xml文件的地址");
- 创建一个XML读取工具对象
SAXReader sr = new SAXReader();
- 使用读取工具对象,读取XML文档的输入流,并得到文档对象
Document doc = sr.read(fis);
- 通过文档对象,获取XML文档中的根元素对象
Element root = doc.getRootElement();
1.4.1 文档对象 Document
指的是加载到内存的整个XML文档
常用方法:
- 通过文档对象,获取XML文档中的根元素对象
Element root = doc.getRootElement();
- 添加根节点
Element root = doc.addElement("根节点名称")
1.4.2 元素对象 Element
指的是XML文档中的单个节点
常用方法:
- 获取节点名称
String getName();
- 获取节点内容
String getText();
- 设置节点内容
String setText();
- 根据子节点名称,获取匹配名称的第一个子节点对象
Element element(String 子节点名称)
- 获取所有子节点对象
List<Element> elements();
- 获取节点的属性值
String attributeValue(String 属性名称)
- 获取子节点的内容
String elementText(String 子节点名称)
- 添加子节点
Element addElement(String 子节点名称)
- 添加属性
void addAttribute(String 属性名, String 属性值);
例如:
FileInputStream fis = new FileInputStream("G:\\Programming\\Java\\Kaikela\\JAVAEE\\04\\0407\\0407\\src\\demo.xml");
SAXReader sr = new SAXReader();
Document doc = sr.read(fis);
Element root = doc.getRootElement();
System.out.println(root.getName());
/*Element book = root.element("book");
Element name = book.element("name");
System.out.println(name.getText());*/
List<Element> es = root.elements();
for (Element e:es) {System.out.println(e.elementText("name"));System.out.println(e.attributeValue("id"));
}
1.5 DOM4J - XPATH 解析XML
1.5.1 路径表达式
通过路径快速地查找一个或一组元素
- / : 从根节点开始查找
- // : 从发起查找的节点位置 查找后代节点
- . : 查找当前节点
- … : 查找父节点
- @ : 选择属性,
属性使用方式:
[@属性名='值']
[@属性名>'值']
[@属性名<'值']
[@属性名!='值']
books: 路径:/book/name 或 //name
//book[id=‘1’]//name
1.5.2 使用步骤
通过Node类的两个方法,来完成查找:
(Node 是 Document 与 Element 的父接口)
方法1:
根据路径表达式,查找匹配的单个节点
Element e = selectSingleNode("路径表达式");
方法2:
List<Element> es = selectionNodes("路径表达式");
1.6 Java生成XML
//通过文档帮助器创建文档对象
Document doc = (Document) DocumentHelper.createDocument();
//给文档对象添加一个根节点(第一个节点)
Element books = doc.addElement("books");
//通过根节点,丰富子节点
for(int i=0; i<10; i++){Element book = books.addElement("book");Element name = book.addElement("name");name.setText("hello world");Element info = book.addElement("info");info.setText("a java tutorial textbook");book.addAttribute("id", 100+i+"");
}
FileOutputStream fos = new FileOutputStream("G:\\Programming\\Java\\Kaikela\\JAVAEE\\04\\0407\\books.xml");
XMLWriter xw = new XMLWriter(fos);
xw.write(doc);
xw.close();
System.out.println("执行完毕");
1.6.1 使用Xstream生成XML文档
Person p = new Person();
p.setAge(18);
p.setName("张三");//xstream使用
//创建xstream对象
XStream x = new XStream();
//修改某个类型生成的根节点
x.alias("person", Person.class);
//传入对象开始生成
String xml = x.toXML(p);
System.out.println(xml);
2. JSON
简介:(JavaScript Object Notation) JS对象简谱,是一种轻量级的数据交换格式
所占空间更小,解析更快
2.1 对象格式
属性间加逗号,属性名加引号,当属性值是字符串时加引号。
JSON可以包含很多层级
{"name":"金苹果","info":"ddd"
}
2.2 解析JSON
2.2.1 GJSON
- 创建JSON
//1.创建JSON对象
Gson g = new Gson();
//2.转换
Book b = new Book(100, "金苹果", "种植苹果");
String s = g.toJson(b);
System.out.println(s);
- 解析JSON
将JSON转换成对象
//1.创建JSON对象
Gson g = new Gson();//2.转换 {"id":100,"name":"金苹果","info":"种植苹果"}
Book b = g.fromJson("{\"id\":100,\"name\":\"金苹果\",\"info\":\"种植苹果\"}", Book.class);
System.out.println(b.getId());
将JSON转换成列表
JSON格式下的数组实际是ArrayList类型的
//1.创建JSON对象
Gson g = new Gson();
//2.转换 {"id":100,"name":"金苹果","info":"种植苹果", "page":["A", "B", "C"]}
HashMap data = g.fromJson("{\"id\":100,\"name\":\"金苹果\",\"info\":\"种植苹果\", \"page\":[\"A\", \"B\", \"C\"]}", HashMap.class);
System.out.println(data.get("page"));
2.2.2 FASTJSON
更适合国内开发环境
- 创建JSON
Book book = new Book(1002, "xxx", "aaa");
//1. 转换
String json = JSON.toJSONString(book);
System.out.println(json);
- 将JSON转换成列表
直接转换成类
Book book = JSON.parseObject("{\"id\":1002,\"info\":\"aaa\",\"name\":\"xxx\"}", Book.class);
System.out.println(book.getId());
将JSON转换成键值对存在哈希表中
HashMap data = JSON.parseObject("{\"id\":1002,\"info\":\"aaa\",\"name\":\"xxx\", \"page\":[\"A\", \"B\", \"C\"]}", HashMap.class);System.out.println(data.get("page"));List<String> list = (List)data.get("page");
System.out.println(list.get(1));
- 从API中获取信息
StringBuilder json = new StringBuilder();
String location = "Bristol";
//1. 获取到JSON资源的输入流
URL url = new URL("http://api.weatherstack.com/current?access_key=932be2be5274beceff8781265ced7233&query="+ location);
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(is));String inputLine = null;
while ( (inputLine = in.readLine()) != null) {json.append(inputLine);
}
in.close();//解析JSON
HashMap data = JSON.parseObject(json.toString(), HashMap.class);
HashMap wDescription = JSON.parseObject(data.get("current").toString(), HashMap.class);
List<String> list = (List)wDescription.get("weather_descriptions");
System.out.println(list.get(0));
XML与JSON的生成与解析相关推荐
- Xml 格式数据的生成和解析
相关阅读 XML约束 Xml 格式数据的生成和解析 XML解析器 什么是XML XML全称为Extensible Markup Language, 意思是可扩展的标记语言,它是 SGML(标准通用标记 ...
- C#对XML、JSON等格式的解析
C#对XML.JSON等格式的解析 一.C#对XML格式数据的解析 1.用XMLDocument来解析 XmlDocument xmlDocument = new XmlDocument();xmlD ...
- XML和JSON 已经常用的解析工具
Json XML 大数据时代,我们需要从网络中获取海量的新鲜的各种信息,就不免要跟着两个家伙打交道,这是两种结构化的数据交换格式.一般来讲,我们会从网络获取XML或者Json格式的数据,这些数据有着特 ...
- C#合成解析XML与JSON
http://www.xuanyusong.com/archives/1901 XML与JSON在开发中非常重要, 其实核心就是处理字符串.一个是XML的字符串一个是JSON的字符串,尤其是在处 ...
- Qt之JSON生成与解析
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December ...
- 实测:xml与json速度约差4倍
xml与json在javascript中解析并使用,速度大约相差4倍.(在IE中测试的结果). 其中主要不在于eval,与xml parse的时间差别,主要在于属性访问上的差别: xml中使用这样的方 ...
- c#解析json字符串数组_C#解析JSON字符串总结
JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...
- golang xml和json的解析与生成
golang中解析xml时我们通常会创建与之对应的结构体,一层层嵌套,完成复杂的xml解析. package main;import ("encoding/xml""fm ...
- Android Json生成及解析实例
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...
最新文章
- hbase 0.96 java api_HBase(九) HBase JAVA API - 运维API
- js实现下拉框三级级联
- python stm32-STM32 上面跑Python
- [WinCE版凯立德]2013夏季版地图2E21J0D更新下载(9.8增加2E23J0D分省地图)
- 查找发布地图的 REST URL并查询相关信息
- 【JAVA 第三章 流程控制语句】课后习题 计算两个日期之间的天数
- 车辆贷款违约预测 Top1(2021科大讯飞)
- 拓端tecdat|新零售消费者特征的数据视野
- ECshop仿顺丰优选综合购物商城平台源码旗舰版+团购+触屏版+微信支付
- 通信原理学习笔记5-1:数字调制——脉冲成形滤波器选择(码间串扰、Nyquist准则、升余弦滚降滤波器、眼图)
- 重磅:使用UOS微信桌面版协议登录,wechaty免费版web协议重放荣光
- ICMP增强型snort规则
- 百度离线地图瓦片下载器
- 头歌:《C语言程序设计编程实践任务》教学团队:祁文青:选择结构程序设计
- 3D游戏编程与设计作业六
- 爱创课堂每日一题第二十九天- ES6的了解?
- QT使用串口与RS485设备通讯
- 3 年 CRUD 从 8K 涨到 28K,谁知道这4个月我到底经历了什么?
- 2021自动驾驶领域最具商业合作价值企业盘点
- 贪心算法——最小生成树
热门文章
- VMWare 14虚拟机下载和安装说明兼容WIN10
- php link rel= icon,link
- python做统计分析_用Python做数据分析,Numpy,Pandas,matp
- 提高孩子睡眠质量 学业事半功倍
- 线性代数【16】再从向量空间理解行列式和重要的右手原则
- 如何使用hardhat进行合约uups模式升级
- 增值税发票扫描识别|发票扫描识别|发票识别
- Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理
- 网易易盾滑块逆向分析 js 滑动轨迹生成_1
- Java码农进阶之路~数组的深进浅出