XML和JSON

本文介绍了XML和JSON作为数据交换格式的特点和作用。XML作为可扩展标记语言,用于不同系统间的数据交换,强调结构和规范;JSON则是一种轻量级的数据交换格式,速度更快,易于阅读和编写。文中详细讲解了XML的文档结构、标签、命名空间、解析器及DOM解析,同时概述了JSON的语法格式和FastJson在Java中的应用。
摘要由CSDN通过智能技术生成

XML和JSON

XML

XML(EXtensible Markup Language),可扩展标记语言.它是一种不同系统间数据交换的格式

XML的特点:

1.与操作系统、编程语言的开发平台无关

2.实现不同系统之间的数据交换

XML的作用:

1.数据交互

2.配置应用程序和网站

3.Ajax基石

XML文档结构

XML文件由两部分组成:

1.声明(写在第一行,内容为XML文件版本信息和编码格式)

2.文档元素描述信息(文档结构)

(1)根元素.一个XML文件只有一对唯一的根元素.

(2)子元素.在根元素之间,按层级缩进对齐

XML标签

XML文档内容由一系列标签元素组成

语法:

<元素名 属性名=“属性值”>元素内容</元素名>

当空元素时(无元素内容),可表示为:

<name> </name>
<name></name>
<name/>

1.属性值用双引号包裹
2.一个元素可以有多个属性
3.属性值中不能直接包含 < 、 " 、&
4.不建议使用的字符: ’ 、>

XML编写注意事项

1.所有XML元素都必须有结束标签
2.XML标签对大小写敏感
3.XML必须正确的嵌套
4.同级标签以缩进对齐
5.元素名称可以包含字母、数字或其他的字符
6.元素名称不能以数字或标点符号开始
7.元素名称中不能含空格

<?xml version="1.0" encoding="GB2312"?>
<PhoneInfo>
	<Brand name="华为">
		<Type name="U8650"/>
		<Type name="HW123"/>
		<Type name="HW321"/>
	</Brand>
	<Brand name="苹果">
		<Type name="iPhone4"/>
	</Brand>
</PhoneInfo>

XML命名空间

在这里插入图片描述

XML命名空间的作用:

1.用来规范属性

2.解决在复杂、大型XML文件中,出现名字相同但是含义不同的元素

XML解析器

解析器类型:

1.非验证解析器.检查文档格式是否良好(如网页报错提示)

2.验证解析器.使用DTD(Document Type Define)检查文档的有效性,dtd文件注明了顺序格式.

解析XML技术

1.DOM

基于XML文档树结构的解析,适用于多次访问的XML文档

特点:比较消耗资源

2.SAX

基于事件的解析,适用于大数据量的XML文档

特点:占用资源少,内存消耗小

3.DOM4J

对DOM进行了封装,是非常优秀的Java XML API,性能优异,功能强大,开放源代码

DOM解析XML

DOM(Document Object Model)文档对象模型,把XML文档映射成一个倒挂的树.

在这里插入图片描述

DOM常用的接口:

DOM解析包:org.w3c.dom包

在这里插入图片描述

public class Test {

	public static void main(String[] args) {
		DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();
		try {
			DocumentBuilder builder =factory.newDocumentBuilder();
			Document doc =builder.parse("收藏信息.xml");
			showInfo(doc);
            addBrand(doc);
            saveXML("bb.xml", doc);
            
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	//显示手机品牌型号方法
	public static void showInfo(Document doc) {
		NodeList brandNode =doc.getElementsByTagName("Brand");
		for(int i=0;i<brandNode.getLength();i++) {
			Element brandEle = (Element)brandNode.item(i);
			System.out.println("品牌:"+brandEle.getAttribute("name"));
			NodeList typeNode =brandEle.getChildNodes();
			for(int j=0;j<typeNode.getLength();j++) {
				if(typeNode.item(j).getNodeType()==Node.ELEMENT_NODE) {
					Element typeEle =(Element)typeNode.item(j);
					System.out.println("型号:"+typeEle.getAttribute("name"));
				}
			}
		}
	}
    
    //增加品牌信息方法
	public static void addBrand(Document doc) {
		Element ele=doc.createElement("Brand");
		ele.setAttribute("name", "三星");
		Element ele1=doc.createElement("Type");
		ele1.setAttribute("name", "Note4");
		ele.appendChild(ele1);
		NodeList phoneinfo=doc.getElementsByTagName("PhoneInfo");
		phoneinfo.item(0).appendChild(ele);
	}    
   	//保存XML文件方法
	public static void saveXML(String path,Document doc) {
		TransformerFactory factory =TransformerFactory.newInstance();
		try {
			Transformer former =factory.newTransformer();
			former.setOutputProperty(OutputKeys.ENCODING, "GB2312");
			former.setOutputProperty(OutputKeys.INDENT, "yes");
			DOMSource source =new DOMSource(doc);
			StreamResult result=new StreamResult(new OutputStreamWriter(new FileOutputStream(path),"GB2312"));
			former.transform(source, result);
		} catch (TransformerConfigurationException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (TransformerException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}
 

}

JSON

JavaScript Object Notation

轻量级的文本数据交换格式,具有自我描述性,比XML传输速度快.

JSON最初用来表示JavaScript中的对象,但目前已独立于JavaScript成为最为常用的数据格式之一.

JSON语法格式

JSON中有两种数据结构:对象和数组

(1)对象

大括号内为对象,对象中的数据由名称/值对构成(key/value)
值的类型可为字符串、数字、布尔值、null、数组、对象
数据之间由逗号隔开

(2)数组

中括号内为数组
数组中的数据类型同对象中值的类型,即可为字符串、数字、布尔值、null、数组、对象

对象和数组可混合使用:

{
	"name":"jason",
	"age":20,
	"skills":["java","Hadoop","Python"]
}
FastJson

是由阿里巴巴开源的JSON解析框架

下载地址:http://central.maven.org/maven2/com/aliaba/fastjson/1.2.47/fastjson-1.2.47.jar

主要是用来将Java对象序列化成JSON字符串,或是将JSON字符串反序列化为Java对象,使用前需要先导入JSON的jar包。

(1)对象—>JSON字符串

​ 通过JSON.toJSONString(对象)方法来完成

	String stuJSON= JSON.toJSONString(student)

(2)JSON字符串–>对象

​ 通过 JSON.parseObject(String json, User.class)方法来完成

	String json = "{\"age\":18,\"birthDate\":1622448323468,\"dog\":{\"name\":\"小花\"},\"dogs\":[{\"name\":\"小1\"}, {\"name\":\"小2\"},{\"name\":\"小3\"}],\"userName\":\"张三\"}";
	User user1 =JSON.parseObject(json, User.class);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值