数据交换格式(JSON,XML)

1. 什么是数据交换格式

客户端与服务器常用数据交换格式xml、json、html

2. 数据交换格式用场景

移动端(安卓、IOS)通讯方式采用http协议+JSON格式 走restful风格。
很多互联网项目都采用Http协议+JSON
因为xml比较重WebService服务采用http+xml格式 银行项目使用比较多

3. JSON简单使用

3.1 什么是JSON

JSON:JavaScript 对象表示法(JavaScript Object Notation)。
是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以客户端和服务器的数据交换格式往往通过JSON来进行交换。
样例:

{
    "id": "10",
    "name": "洺润Star",
    "look": [
        {
            "itemId": "20",
            "itemName": "漂亮的大眼睛"
        },
        {
            "itemId": "21",
            "itemName": "帅气的发型"
        }
    ]
}

JSON的形式是用大括号“{}”包围起来的项目列表,每一个项目间用逗号(,)分隔,而项目就是用冒号(:)分隔的属性名和属性值。这是典型的字典表示形式,也再次表明javascript里的对象就是字典结构。不管多么复杂的对象,都可以用一句JSON代码来创建并赋值。在JSON中,名称 / 值对包括字段名称(在双引号中),后面写一个冒号,然后是值

3.2 JSON格式的分类

JSON有两种结构
json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构

  1. 对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,…}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
  2. 数组:数组在js中是中括号“[]”括起来的内容,数据结构为 [“java”,“javascript”,“vb”,…],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

经过对象、数组2种结构就可以组合成复杂的数据结构了。

3.2 常用JSON解析框架

fastjson(阿里)、gson(谷歌)、jackson(SpringMVC自带)

下面将使用主流技术fastjson解析json:

  1. maven依赖
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.1.43</version>
</dependency>
  1. 常用用fastjson api
public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray 
public static final JSONObject parseObject(String text)// 把JSON文本parse成JSONObject    
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean 
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray 
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 
public static final Object toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArray。
  1. 解析json
static String jsonStr = "{\"sites\":[{\"name\":\"百度\",\"url\":\"www.baidu.com\"},{\"name\":\"搜狗\",\"url\":\"http://sougou.com/\"}]}";
    
public static void main(String[] args) {
	// 将json字符串转为jsonbject
	JSONObject jsonStrObject = JSONObject.parseObject(jsonStr);
	JSONArray jsonArray = jsonStrObject.getJSONArray("sites");
	for (Object object : jsonArray) {
		JSONObject stObject = (JSONObject) object;
		String name = stObject.getString("name");
		String url = stObject.getString("url");
		System.out.println(name + "---" + url);
	}
}
  1. Json转对象
class Item {
	private String itemId;
	private String itemName;
	//getter setter
		@Override
	public String toString() {
		return "Item [itemId=" + itemId + ", itemName=" + itemName + "]";
	}
}
public class User {

	private String id;
	private String name;
	private List<Item> items;
	//getter setter
		@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", items=" + items + "]";
	}

}

Json转换对象api

// 2.使用java反射机制 对应生成对象
User user = new JSONObject().parseObject(json, User.class);
System.out.println("user:" + user.toString());
  1. 组装json
// 1.json api 封装json
JSONObject jsonObject = new JSONObject();
jsonObject.put("id","01");
jsonObject.put("name","洺润Star");

JSONArray arrayList = new JSONArray();
JSONObject object1 = new JSONObject();
object1.put("itemId", "20");
object1.put("itemName", "大眼睛");
JSONObject object2 = new JSONObject();
object2.put("itemId", "30");
object2.put("itemName", "鹅蛋脸");
arrayList.add(object1);
arrayList.add(object2);

jsonObject.put("items",arrayList);
System.out.println(jsonObject.toJSONString());
  1. 将对象转换成json字符串
User user = new User();
user.setId("01");
user.setName("洺润Star");

List<Item> items =new ArrayList<Item>();
Item item1 = new Item();
item1.setItemId("01");
item1.setItemName("大眼睛");
Item item2 = new Item();
item2.setItemId("30");
item2.setItemName("鹅蛋脸");
items.add(item1);
items.add(item2);
user.setItems(items);
System.out.println(new JSONObject().toJSONString(user));

4. XML简单使用

4.1 什么是XML?

它是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言。
XML 全称为可扩展的标记语言。主要用于描述数据和用作配置文件。
XML 文档在逻辑上主要由一下 5 个部分组成:

  • XML 声明:指明所用 XML 的版本、文档的编码、文档的独立性信息
  • 文档类型声明:指出 XML 文档所用的 DTD
  • 元素:由开始标签、元素内容和结束标签构成
  • 注释:以结束,用于对文档中的内容起一个说明作用
  • 处理指令:通过处理指令来通知其他应用程序来处理非 XML 格式的数据,格式为 XML文档的根元素被称为文档元素,它和在其外部出现的处理指令、注释等作为文档实体的子节点,根元素本身和其内部的子元素也是一棵树。

4.2 XML样例

<?xml version="1.0" encoding="UTF-8"?>  
<students>  
    <student1 id="001">  
        <姓名>洺润Star</姓名>  
        <学号>20140101</学号>  
        <地址>宛城区</地址>  
        <座右铭>人类的赞歌就是勇气的赞歌</座右铭>  
    </student1>  
    <student2 id="002">  
        <姓名>gfd</姓名>  
        <学号>20140102</学号>  
        <地址>北京朝阳区</地址>  
        <座右铭>亲爱的洺润</座右铭>  
    </student2>  
</students>  

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

xml文件头部要写的话,说明了xml的版本和编码,utf-8一般是网络传输用的编码
XML解析方式

4.4 解析xml

解析xml常用的技术有 Dom4j、Sax、Pull

4.4.1 Dom4j与Sax区别

dom4j不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出
sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml,也正是因为如此,所以dom4j可以对xml进行灵活的增删改查和导航而sax没有这么强的灵活性,所以sax经常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操作就用dom4j。

4.4.2 使用dom4j解析xml

解析XML过程是通过获取Document对象,然后继续获取各个节点以及属性等操作,因此获取Document对象是第一步,大体说来,有三种方式:

1. 自己创建Document对象
Document document = DocumentHelper.createDocument();
Element root = document.addElement("students");
其中students是根节点,可以继续添加其他节点等操作。
2. 通过xml文件创建Document对象
// 创建SAXReader对象
SAXReader reader = new SAXReader();
// 读取文件 转换成Document
Document document = reader.read(new File("XXXX.xml"));
3. 读取XML文本内容获取Document对象
String xmlStr = "<students>......</students>";
Document document = DocumentHelper.parseText(xmlStr);

解析xml代码
准备一个Xml文件用来解析:

<?xml version="1.0" encoding="UTF-8"?>  
<students>  
    <student1 id="001">  
        <姓名>洺润Star</姓名>  
        <学号>20140101</学号>  
        <地址>宛城区</地址>  
        <座右铭>人类的赞歌就是勇气的赞歌</座右铭>  
    </student1>  
    <student2 id="002">  
        <姓名>gfd</姓名>  
        <学号>20140102</学号>  
        <地址>北京朝阳区</地址>  
        <座右铭>亲爱的洺润</座右铭>  
    </student2>  
</students>  

倚赖

<dependency>
	<groupId>org.dom4j</groupId>
	<artifactId>dom4j</artifactId>
	<version>2.0.0</version>
</dependency>

Java代码

public static void main(String[] args) throws DocumentException {
		SAXReader saxReader = new SAXReader();
		Document read = saxReader.read(new File("E://work//spring-ioc//src//main//resources//stu.xml"));
		// 获取根节点
		Element rootElement = read.getRootElement();
		getNodes(rootElement);

	}

	static public void getNodes(Element rootElement) {
		System.out.println("当前节点名称:" + rootElement.getName());
		// 获取属性ID
		List<Attribute> attributes = rootElement.attributes();
		for (Attribute attribute : attributes) {
			System.out.println("属性:" + attribute.getName() + "---" + attribute.getText());
		}
		if (!rootElement.getTextTrim().equals("")) {
			System.out.println(rootElement.getName() + "--" + rootElement.getText());
		}
		// 使用迭代器遍历
		Iterator<Element> elementIterator = rootElement.elementIterator();
		while (elementIterator.hasNext()) {
			Element next = elementIterator.next();
			getNodes(next);
		}

	}

4.5 XML与JSON区别

Xml是重量级数据交换格式,占宽带比较大。
JSON是轻量级交换格式比xml占宽带小。
所有很多互联网公司都会使用json作为数据交换格式
很多银行项目,大多数还是在使用xml。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值