主要介绍xml和json的框架,json的使用方法。
java中xml用的不多,除了配置文件,语法格式不难。不做详细介绍。
关于SAXReader类读取,自动生成及其工具类XStream使用方法,在github有源码,配有注释和笔记,文末自取。 1
补充:使用需要对应的jar包,可以自己在github下载,或者在我的github中根目录下的lib拿到。
先看脑图吧:
xml
下面所有代码外面加main函数即可运行!POJO代码不贴出! 所有涉及路径的代码,请修改成你自己的
解析本地xml
// 1. 获取输入流
FileInputStream fis = new FileInputStream("src/com/hllg/chap4/xmlAndJson/person.xml");
// 2. 创建xml读取对象
SAXReader sr = new SAXReader();
// 3. 读取并得到文档对象
Document doc = sr.read(fis);
// 4. 通过文档获取跟元素
Element root = doc.getRootElement();
// 5.开始解析元素,读取元素名称
System.out.println(root.getName());
//只能获取到第一个匹配的
Element person = root.element("person");
Element name = person.element("name");
System.out.println(name.getText());
System.out.println("-----------------------");
//获取所有根下的元素
List<Element> es = root.elements();
for (int i = 0; i < es.size(); i++) {
//遍历根下所有的子元素
Element persons = es.get(i);
//person节点id属性的值
System.out.println(persons.attributeValue("id"));
//person节点name元素的值
System.out.println(persons.elementText("name"));
System.out.println(persons.elementText("sex"));
System.out.println(persons.elementText("info"));
System.out.println("-----------------------");
解析网络xml
运行前注意:自己随便填个正确的手机号,我自己的删了,下面有手机号的都一样!
//自己随便填个手机号,我自己的删了,下面都一样
String phone = "";
URL url = new URL("http://apis.juhe.cn/mobile/get?phone=" + phone + "&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
SAXReader sr = new SAXReader();
Document doc = sr.read(is);
Element root = doc.getRootElement();
String resultCode = root.elementText("resultcode");
//System.out.println(resultCode);
if ("200".equals(resultCode)) {
Element result = root.element("result");
String province = result.elementText("province");
String city = result.elementText("city");
String zip = result.elementText("zip");
String areaCode = result.elementText("areacode");
String company = result.elementText("company");
if (province.equals(city)) {
System.out.println("你所在的城市是:" + city + ",邮编是:" + zip + ",区号是:" + areaCode + ",所属运营公司:" + company);
} else {
System.out.println("你所在的省份是:" + province + ",城市是:" + city + ",邮编是:" + zip + ",区号是:" + areaCode + ",所属运营公司:" + company);
}
} else {
System.out.println("手机号输入有误");
}
XPath解析
String phone = "";
URL url = new URL("http://apis.juhe.cn/mobile/get?phone=" + phone + "&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
SAXReader sr = new SAXReader();
Document doc = sr.read(is);
//只有单个节点,如果有多个,返回第一个;
//解析效率和Element没区别,就是写起来方便,内部封装了代码
//Node是Element和Document的父接口
Node node = doc.selectSingleNode("//company");
System.out.println("运营商是:" + node.getText());
生成xml
里面字符串和命名我自己写着玩的,你们看着改。
// 1. 通过文档帮助器创建一个空白文档
Document doc = DocumentHelper.createDocument();
// 2. 给文档添加第一个节点(根节点)
Element wives = doc.addElement("wives");
// 3. 通过根节点,丰富文档内容
for (int i = 0; i < 100; i++) {
Element wife = wives.addElement("wife");
Element name = wife.addElement("name");
name.setText("xx" + i + "号");
Element say = wife.addElement("say");
say.setText("喜欢你" + i + "次");
//加""是为了转换成字符串;追加属性
wife.addAttribute("id", 100 + i + "");
}
// 4. 创建一个文件输出输出流
FileOutputStream fos = new FileOutputStream("src/com/hllg/chap4/xmlAndJson/hl.xml");
// 5. 将文件输出流转换成XML输出流
XMLWriter xw = new XMLWriter(fos);
// 6. 写出文档
xw.write(doc);
// 7 . 释放资源
xw.close();
System.out.println("执行完毕");
通过XStream自动生成xml
Person hl = new Person("hl", 18, "喜欢你");
//XStream的使用
// 1. 创建XStream的对象
XStream x = new XStream();
// 2. 修改某个类型生成的节点名称(可选设置;默认是包名.类名)
x.alias("hl",Person.class);
// 3. 传入对象开始生成
String xml = x.toXML(hl);
System.out.println(xml);
json
重点介绍json的两个工具类:一个是谷歌的Gson,还有一个阿里的FastJson,解析时用到。
首先:
Gson
以下字符串指json格式数据
对象转字符串:
//新建对象,只使用一次,用匿名对象
Gson g = new Gson();
Person p = new Person("hl", 18, '女');
//转换
String person = g.toJson(p);
字符串转对象:
Gson g = new Gson();
//转换,注意两个参数,
Person p = g.fromJson("{\"name\":\"hl\",\"age\":18,\"sex\":\"女\"}", Person.class);
System.out.println(p.getName());
键值对的值包含数组:
Gson g = new Gson();
//转换{"name":"hl","age":18,"sex":"女","w":["hl1","hl2","hl3"]}
HashMap data = g.fromJson("{\"name\":\"hl\",\"age\":18,\"sex\":\"女\",\"w\":[\"hl1\",\"hl2\",\"hl3\"]}", HashMap.class);
System.out.println(data.get("w"));
//ArrayList,对象里面有数据,他就会转换成ArrayList(List)
System.out.println(data.get("w").getClass());
List list = (List) data.get("w");
System.out.println(list.get(1));
FastJson
对象转换成字符串:
Person p = new Person("cc",24,'女');
String person = JSON.toJSONString(p);
字符串转对象:
// 1. 转换 {"age":24,"name":"cc","sex":"女"}
Person c = JSON.parseObject("{\"age\":24,\"name\":\"cc\",\"sex\":\"女\"}", Person.class);
System.out.println(c.getName());
字符串转数组:
// 1. 转换 ["hl","cc","hh"]
List<String> strings = JSON.parseArray("[\"hl\",\"cc\",\"hh\"]", String.class);
System.out.println(strings.get(0));
就到这,下次见
sue
2021-2-9 20:47:30
修改github地址,文件夹修改名称了。
2021-2-11 16:07:14
补充jar包的说明,及其获取过程。
2021-2-11 16:19:59
https://github.com/SueRichard/kaikeba/tree/main/src/com/hllg/javaBasic/xmlAndJson ↩︎