目录
DOM 解析方式 支持Xpath:books//book//name
JSON: JavaScript (和大哥Java没有关系,只是蹭Java热度)
HashMap中的page看似为数组,实则是ArrayList
网络数据传输
为什么学习xml?
XML具有平台无关性
比如: 配置文件
具体:<name>Allen </name>
只有一个根标记
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="1001">
<name>幸福的勇气</name>
<info>勇敢去发现生活中的美,让自己值得</info>
</book>
<book id="1002">
<name>被讨厌的勇气</name>
<info>做自己,学会课题分离,让心轻装上阵</info>
</book>
</books>
CDATA语法 里的xml内容不会被解析
Java有几种解析方式? 四种 最主要的有DOM4J
SAX (逐行驱动)
优点:不需占过大内存, 找到目标即可
劣势:无法返回,单线程
和
DOM 解析方式 支持Xpath:books//book//name
优势:文档完整加载,允许修稿
双向访问,双向解析
劣势:如果xml过大,内存消耗量过大
xml解析
引入jar文件 demo4j.jar
lib导入jar包却无法编译?
Modules的dependencies是否配置正确,下图步骤
DOM 4j - XPATH解析 XML
路径表达式
优势:针对大量的文件可以很方便的进行查询操作
查找所有的name节点
方法一:
List<Node> names = doc.selectNodes("//book[@id='1002']//name");
for (int i = 0 ;i<names.size();i++){
System.out.println(names.get(i).getName());
System.out.println(names.get(i).getText());
}
方法二:
Node n = doc.selectSingleNode("//book[@id='1002']//name");
System.out.println(n.getName()+":"+n.getText());
聚合数据
package XMLDemo;
//
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
/**
* @Author:Allen
* @Date:4/1/2021 10:59 AM
*/
public class Demo4 {
public static void main(String[] args) throws IOException, DocumentException {
String phone = "15868253582";
//定义URL实例
URL url = new URL("http://apis.juhe.cn/mobile/get?phone=" + phone + "&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
//获取urlconnection连接
URLConnection urlConnection = url.openConnection();
//从url中读取流对象
InputStream inputStream = urlConnection.getInputStream();
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(inputStream);
Node node = doc.selectSingleNode("//company");
System.out.println("这是运营商: "+node.getText());
/* 1.获取流对象 InputStream is = urlConnection.getInputStream();
2.逻辑:通过xml读取对象,读取数据,返回文档对象
解析文本内容
3 读取根节点的文本内容 resultcode 如果200 是符合的,那么接着
解析result结果,去获得省份,城市,判断是否相等后,输出号码的归属地*/
}
}
JSON: JavaScript (和大哥Java没有关系,只是蹭Java热度)
Yahoo 与 Google主推 更方便程序员的使用
class Book{
private String name;
private String info;
get/set
}
Book b = new Book();
b.setName();
b.setInfo();
····
JS:
var b = new Object();
b.name="";
b.info="";
Xml:
<book>
<name></name>
<info></info>
</book>
Json:
{
"name":"",
"info":""
}
{} 表示 object
Json 解析
package JasonDemo;
import com.google.gson.Gson;
/**
* @Author:Allen
* @Date:4/6/2021 8:19 PM
*/
public class Demo1 {
public static void main(String[] args) {
//1. 创建Gson对象
Gson g = new Gson();
//2. 转换
//Book b = new Book("1","《我曾走在崩溃边缘》","每一个不曾起舞的日子,都是对生命的辜负。");
Book b = g.fromJson("{\"id\":\"1\",\"name\":\"《我曾走在崩溃边缘》\",\"info\":\"每一个不曾起舞的日子,都是对生命的辜负。\"}",Book.class);
//String s = g.toJson(b);
System.out.println(b.getInfo());
}
}
匿名对象方法 toJson
package JasonDemo;
import com.google.gson.Gson;
/**
* @Author:Allen
* @Date:4/6/2021 8:32 PM
*/
public class Demo2 {
public static void main(String[] args) {
// Gson g = new Gson();
Book b1 = new Book("2","《非线性成长》","突破自己,成就不凡");
String s =new Gson().toJson(b1);
System.out.println(s);
}
}
HashMap中的page看似为数组,实则是ArrayList
package JasonDemo;
import com.google.gson.Gson;
import java.util.HashMap;
import java.util.List;
/**
* @Author:Allen
* @Date:4/6/2021 8:38 PM
*/
public class Demo3 {
public static void main(String[] args) {
Gson g = new Gson();
// Book b = new Gson().fromJson("",Book.class);
HashMap data = g.fromJson("{\"id\":\"1\",\"name\":\"《我曾走在崩溃边缘》\",\"info\":\"每一个不曾起舞的日子,都是对生命的辜负。\",\"page\":[为天地立心,为生民立命,为往圣继绝学,为万世开太平]}",HashMap.class);
List list= (List) data.get("page");
System.out.println(list.get(1));
}
}
Fast Json 国内常用 (建议与团队保持一致)
package JasonDemo;
import com.alibaba.fastjson.JSON;
/**Fast json Alibaba
* @Author:Allen
* @Date:4/6/2021 8:51 PM
*/
public class Demo4 {
public static void main(String[] args) {
Book b1 = new Book("4","《如何系统思考》","练脑修心勤身");
String json = JSON.toJSONString(b1);
System.out.println(json);
}
}
接受对象,打印对应的info
package JasonDemo;
import com.alibaba.fastjson.JSON;
import java.lang.reflect.Type;
/**
* @Author:Allen
* @Date:4/6/2021 8:57 PM
*/
public class Demo5 {
public static void main(String[] args) {
Book s = JSON.parseObject("{\"id\":\"4\",\"info\":\"练脑修心勤身\",\"name\":\"《如何系统思考》\"}", Book.class);
System.out.println(s.getInfo());
}
}
转换数组
String.class
package JasonDemo;
import com.alibaba.fastjson.JSON;
import java.lang.reflect.Type;
import java.util.List;
/** Fast Json 解析
* @Author:Allen
* @Date:4/6/2021 9:03 PM
*/
//{"id":"4","info":"练脑修心勤身","name":"《如何系统思考》"}
//["Apple","Microsoft","Google"]
public class Demo6 {
public static void main(String[] args) {
List<String> s = JSON.parseArray("[\"Apple\",\"Microsoft\",\"Google\"]", String.class);
System.out.println(s.get(2));
}
}