XML
基本介绍
xml 可扩展标记语言, 标记:标签 XML通过标签去定义里面的内容
作用:
1作为 一种文件格式 跟.docx类型 可以存储数据,当做小型数据库一样
2用于数据交换,现在用的不是很多,比如一些银行还在使用
3写配置文件:我们需要关注的地方,我们后面的很多框架配置基本上都是xml写的
基本格式
注意点:
1支持标签自定义
2标签不能乱套,即不能随意嵌套
3大小写敏感,即开始标签大写,结束标签也大写
4属性值必须加引导
5XML 可以形成一棵DOM树
xml约束
1. DTD约束,即可以编写一个xxx.dtd文档,在里面写你的约束条件
2. schema:一般在web中的配置文件中常见,比如spring的配置, <bean>
特殊符号的处理
比如>、<,在xml中可能不会正确解析格式,需要使用一些符号进行替换!
若有多个这种特殊的符号,可以使用上面的符号一个一个写,但是比较麻烦,所以,我们可以将这种整
体包起来,用CDATA语法!! <![CDATA[" 开始,由 "]]>
注释
<!--你的注释内容-->
xml解析
Dom4j的基本使用
作为一个独立的框架/工具,以第三方jar的形式存在的,所以在项目中使用的话,需要引入进
来!!!后面凡是需要的第三方jar包,都需要引入进来!
手动copy,后面我们使用maven去管理!!!!!
下载
引进到项目中
导入后注意观察是否有上面的向右箭头!!!
JSON
信息交换的格式!!
1. 能认识JSON格式
2. 会使用解析工具去json,阿里的FastJson,还有别的,比如Gson、hutool(它是一个功能非常全
面的工具集封装,比如操作DB、IO流的读写、解析JSON、加密.........)、Jackson
fastjson入口类是com.alibaba.fastjson.JSON,主要的API是JSON.toJSONString,和
parseObject。
下载安装
略,同上面的dom4j的下载安装
package test02;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestFastJSON {
public static void main(String[] args) {
String str = "{\"name\":\"zs\",\"time\":\"\",\"age\":10,\"person\":
{\"sex\":\"male\",\"salary\":222.22},\"sites\":[{\"name\":\"菜鸟教程
\",\"url\":\"www.runoob.com\"},{\"name\":\"google\",\"url\":\"www.google.com\"},
{\"name\":\"微博\",\"url\":\"www.weibo.com\"}]}";
JSONObject jsonObject = JSON.parseObject(str);
//todo 1.根据key获取value
Object name = jsonObject.get("name");
//Object name = jsonObject.getString("name");
System.out.println(name);
//todo 2.获取json串中的数组
JSONArray sites = jsonObject.getJSONArray("sites");
//遍历数组
for (int i = 0; i < sites.size(); i++) {
JSONObject jsonArrayObj = sites.getJSONObject(i);
String siteName = jsonArrayObj.getString("name");
String siteUrl = jsonArrayObj.getString("url");
System.out.println(siteName + "," + siteUrl);
} /
/todo 3.拿到一个对象
JSONObject person = jsonObject.getJSONObject("person");
Double salary = person.getDouble("salary");System.out.println(person.getString("sex") + "," + salary);
//todo 4.自动将json串中的值解析出来,封装成一个对象
Human human = JSON.parseObject(str, Human.class);
System.out.println(human);
//todo 6.自动将json串中的值解析出来,转换成一个map
//
Map mapObj = JSONObject.parseObject(str,Map.class);
System.out.println(mapObj);
//=====================================
//将对象、集合、Map转为json字符串
Human p1 = new Human("zaa", 12);
Human p2 = new Human("z22", 12);
Human p3 = new Human("za33", 12);
List<Human> list =new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(p3);
String jsonStr = JSON.toJSONString(p1);
System.out.println(jsonStr);
System.out.println(JSON.toJSONString(list));
Map<String,Human> map = new HashMap<>();
map.put("1001",p1);
map.put("1002",p2);
map.put("1004",p3);
System.out.println(JSON.toJSONString(map));
}
}
package test02;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.SerializerFeature;
import java.util.Date;
public class Human {
private String name;
private Integer age;
//@JSONField(serialzeFeatures = {SerializerFeature.WriteMapNullValue})
private String time;
public Human() {}
public Human(String name, Integer age) {
this.name = name;
this.age = age;
} p
ublic void setTime(String time) {
this.time = time;
} p
ublic String getTime() {
return time;
} @
JSONField(serialzeFeatures = {SerializerFeature.WriteMapNullValue})
private Double salary;
public String getName() {
return name;
} p
ublic void setName(String name) {
this.name = name;
} p
ublic Integer getAge() {
return age;
} p
ublic void setAge(Integer age) {
this.age = age;
} p
ublic Double getSalary() {
return salary;
} p
ublic void setSalary(Double salary) {
this.salary = salary;
} @
Override
public String toString() {
return "Human{" +
"name='" + name + '\'' +
", age=" + age +
", salary=" + salary +
", date=" + time +
'}';
}
}
JSONField 说明
可以通过 @JSONField ,去设置很多信息,比如json串中的key的名字、日期型的格式化、是否序列化.....
//这两个可能会用到
String name() default "";
String format() default "";
扩展