欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JAVA 的数据交换格式

程序员文章站 2022-05-19 13:23:12
...

什么是数据交换格式?

客户端 和服务器端的交互格式为 HTML 丶 JSON 丶 XML

数据交换格式用场景
安卓 移动端 等 采用 HTTP + JSON 进行传输
WEB Service 采用 HTTP +XML 进行传输

注意:JSON 是轻量级的交互格式 而 XML 是重量级的交互格式 不是很适合 HTTP 进行交互

什么是JSON?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式

JSON对象列子:

{
"key":"value",
"key":"value",
"key":"value",
"key":"value",
 }

JSON 数组列子:

 {
       "name":[
        {
        "key":"value",
         },
         {
        "key":"value",
         }
          ],
        "name2":[
        {
        "key":"value",
         },
         {
        "key":"value",
         }
 }

JSON有两种结构:
第一种 : JSON 数组 用 { }包裹 key : value 多个 用 , 分开
第二种: JSON 数组 用{ name:[ ] } 多个 用 , 分开
常用JSON解析框架
fastjson(阿里)、gson(谷歌)、jackson(SpringMVC自带)
添加jar fastjson-1.1.43 或引入maven依赖

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.43</version>
</dependency>

fastjson api 的使用

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class GetJson {

	public static void main(String[] args) {
		String jsonStr = "{\"sites\":[{\"name\":\"百度\",\"url\":\"www.baidu.com\"},{\"name\":\"优酷\",\"url\":\"http://youku.com/\"}]}";
		JSON.getJSON(jsonStr);
		JSONObject stObject = new JSONObject();
		stObject.put("name", "百度");
		stObject.put("url", "www.baidu.com");

		System.out.println(JSON.setJSON(stObject));
	}
	
}

class JSON{
	
	//返回JSON数组
	public static Object getJSON(String  jsonStr) {
		JSONObject jsonObject = new JSONObject();
		JSONObject jsonStrObject = jsonObject.parseObject(jsonStr);
		System.out.println(jsonStrObject.toString());
		return jsonStrObject.getJSONArray("sites");
	}
	
	
	//返回 生成的JSON 
	public static String setJSON(JSONObject stObject) {
		JSONObject jsonObject = new JSONObject();
		JSONArray jsonArray = new JSONArray();
		jsonArray.add(stObject);
		jsonObject.put("sites", jsonArray);
		return jsonObject.toJSONString();
	}
	
	
}

XML解析方式

什么是XML?
它是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言。
XML 全称为可扩展的标记语言。主要用于描述数据和用作配置文件。

Dom4j与Sax区别?
Dom4j 不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出,Sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml,也正是因为如此

<?xml version="1.0" encoding="UTF-8"?>  
<students>  
    <student1 id="001">  
        <微信公众号>独孤求败</微信公众号>  
        <学号>20140101</学号>  
        <地址>北京海淀区</地址>  
        <座右铭>要么强大,要么听话</座右铭>  
    </student1>  
    <student2 id="002">  
        <新浪微博>残缺的孤独</新浪微博>  
        <学号>20140102</学号>  
        <地址>北京朝阳区</地址>  
        <座右铭>在哭泣中学会坚强</座右铭>  
    </student2>  
</students>  

JAVA 代码:

	public static void getXML() throws DocumentException {
		
		SAXReader saxReader = new SAXReader();
		Document read = (Document) saxReader.read(new File("E:\\BaiduNetdiskDownload\\1+2+3+4期\\01 java架构师蚂蚁1\\0005-每特教育(蚂蚁课堂)-数据交换格式与SpringIOC底层实现\\代码\\spring-test\\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);
		}

	}