1.简介
1.1xml简介
可扩展标记语言(eXtensible Markup Language)
特性:
- xml具有平台无关性, 是一门独立的标记语言.
- xml具有自我描述性
1.2JSON简介
JSON: (JavaScript Object Notation) JS对象简谱 , 是一种轻量级的数据交换格式.
2.二者的异同点
JSON 与 XML 的相同之处:
JSON 和 XML 数据都是 “自我描述” ,都易于理解。
JSON 和 XML 数据都是有层次的结构。
JSON 和 XML 数据可以被大多数编程语言使用。
JSON 与 XML 的不同之处:
JSON 不需要结束标签
JSON 更加简短
JSON 读写速度更快
JSON 可以使用数组
3.XML使用方法
3.1XML文档的编写
在使用XML之前先学会用文本文档编写。
首先需要创建一个文本文档,之后将后缀更改为xml模式,选择打开模式为记事本打开,即可直接编写内容。
编写格式:
1.文档声明:编写版本,并且选择编码方案。
2.内容编写:编写格式,语法。
开始标记(开放标记): <标记名称>
结束标记(闭合标记): </标记名称>
标记名称定义规则
1.名称可以含字母、数字以及其他的字符
2.名称不能以数字或者标点符号开始
3.名称不能以字符 “xml”(或者 XML、Xml)开始
4.名称不能包含空格,不能包含冒号(:)
5.名称区分大小写
标记内容: 开始标记与结束标记之间 ,是标记的内容.
注意事项:
1.一个XML文档中, 必须有且仅允许有一个根标记.
2.标记可以嵌套, 但是不允许交叉.
反例:(age和name交叉在了一起,错误)
<person>
<name>李四<age></name>
18</age>
</person>
3.标记名称 允许重复
4.标记除了开始和结束 , 还有属性.
例:(这里book有了id这个属性)
<book id="1001">
<name>西游记</name>
<info>打怪物</info>
</book>
5.注释
注释不能写在文档文档声明前
注释不能嵌套注释
编写示例:
<?xml version = "1.0" encoding = "UTF-8"?>
<books>
<book id="1001">
<name>西游记</name>
<info>打怪物</info>
</book>
<book id="1002">
<name>西游记2</name>
<info>打怪物2</info>
</book>
</books>
3.2.解析电脑上的xml文件
也是需要一些jar包的,如果没有可以下方评论,我给你
public static void main(String[] args) throws FileNotFoundException, DocumentException {
//获取文件输入流
FileInputStream fis = new FileInputStream("E://图书.xml");
//创建XML读取工具对象
SAXReader sr = new SAXReader();
//通过读取工具, 读取XML文档的输入流 , 并得到文档对象
Document dc = sr.read(fis);
//通过文档对象 , 获取文档的根节点对象
Element e = dc.getRootElement();
//输出根节点的名称
System.out.println(e.getName());
//将根节点的下一个节点存入List集合
List<Element> list = e.elements();
for(int i = 0;i<list.size();i++){
Element book = list.get(i);
System.out.println("编号:"+book.attributeValue("id"));
System.out.println("name"+book.elementText("name"));
System.out.println("info"+book.elementText("info"));
}
}
结果:
3.3获取指定节点的内容
public static void main(String[] args) throws FileNotFoundException, DocumentException {
//获取输入流
FileInputStream fis = new FileInputStream("E:\\图书.xml");
//读取工具
SAXReader sr = new SAXReader();
//读取并得到文档对象
Document dc = sr.read(fis);
//在这里指定节点,这个节点可以看上面的xml文档的编写实例一致
Node n = dc.selectSingleNode("//book[@id = '1002']//name");
//打印节点的名称和内容
System.out.println(n.getName()+":"+n.getText());
}
执行结果:
3.4java生成xml文件
public static void main(String[] args) throws IOException {
Document doc = DocumentHelper.createDocument();
Element books = doc.addElement("books");
for(int i= 0;i<10;i++){
Element book = books.addElement("book");
Element name = book.addElement("name");
name.setText("迪迦奥特曼");
Element info = book.addElement("info");
info.setText("奥特曼打小怪兽");
book.addAttribute("id",String.valueOf(100+i));
}
FileOutputStream fos = new FileOutputStream("books.xml");
XMLWriter xw = new XMLWriter(fos);
xw.write(doc);
fos.close();
System.out.println("ok");
}
运行结果:(截取一部分)
3.5将对象写入XML
先声明一个对象
class Person{
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
然后将对象写入xml文档
Demo6.Person p = new Demo6.Person();
p.setName("老白");
p.setAge(60);
XStream xs = new XStream();
xs.alias("person",Demo6.Person.class);
String xml = xs.toXML(p);
System.out.println(xml);
结果:
4.JSON解析与生成
工具包可以直接搜Gson(方法1的jar包)或fastJSON(方法2)去官网下载
先声明一个对象类
public class Person {
private String id;
private String name;
private int age;
@Override
public String toString() {
return "Person{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
'}';
}
public Person() {
}
public Person(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
4.1 对象转JSON
方式1:
public static void main(String[] args) {
Person p = new Person("1","老王",38);
String s = (new Gson()).toJson(p);
System.out.println(s);
}
方式2:
public static void main(String[] args) {
Person p = new Person("2","老王",35);
String s = JSON.toJSONString(p);
System.out.println(s);
}
运行结果
4.2JSON转对象
方式1:
public static void main(String[] args) {
Person p = (new Gson()).fromJson("{\"id\":\"1\",\"name\":\"老王\",\"age\":38}",Person.class);
//获取了名称
System.out.println(p.getName());
}
方式2:
public static void main(String[] args) {
Person p = JSON.parseObject("{\"age\":35,\"id\":\"2\",\"name\":\"老王\"}",Person.class);
System.out.println(p.toString());
System.out.println(p.getName());
}
结果:
4.3JSON里存在数组,转换成对象
方式1:
public static void main(String[] args) {
HashMap map = new Gson().fromJson("{\"id\":\"1\",\"name\":[\"老王\",\"王叔叔\",\"小王\"],\"age\":38}",HashMap.class);
List list = (List) map.get("name");
System.out.println(list.get(2));
}
结果:
方式2:
public static void main(String[] args) {
List list = JSON.parseArray("[\"哈哈哈哈哈\",\"嘿嘿嘿嘿嘿\",\"呵呵呵呵呵\"]",String.class);
//获取下标为1的数据
System.out.println(list.get(1));
}
结果