什么是 XML?
- XML 指可扩展标记语言(EXtensible Markup Language)
- XML 是一种标记语言,很类似 HTML
- XML 的设计宗旨是传输数据,而非显示数据
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准
JSON 简介
JSON: JavaScript Object Notation(JavaScript 对象标记法)。
JSON 是一种存储和交换数据的语法。
JSON 是通过 JavaScript 对象标记法书写的文本。
1.XML解析
package lib.lib.Demo; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import javax.print.Doc; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.List; public class Demo1 { public static void main(String[] args) throws Exception { FileInputStream fis=new FileInputStream("D://Demo1.xml"); SAXReader sr=new SAXReader(); Document doc=sr.read(fis); Element root = doc.getRootElement(); System.out.println(root.getName()); List<Element> es=root.elements(); for(int i=0;i<es.size();i++){ Element book=es.get(i); System.out.println(book.elementText("name")); System.out.println(book.elementText("info")); System.out.println("----------"); } fis.close(); } }
2.XPATH解析
package lib.lib.Demo; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.List; public class Demo2 { public static void main(String[] args) throws IOException, DocumentException { FileInputStream fis=new FileInputStream("D://Demo1.xml"); SAXReader sr=new SAXReader(); Document doc=sr.read(fis); //通过文档对象+xpath,查找所有的name节点 List<Element> names=doc.selectNodes("//name"); for(int i=0;i<names.size();i++){ System.out.println(names.get(i).getName()); System.out.println(names.get(i).getText()); } //当查询结果为一个时可以用 doc.selectSingleNode fis.close(); } }
3.XML生成
package lib.lib.Demo; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.XMLWriter; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; public class Demo3 { public static void main(String[] args) throws IOException { //1.通过文档帮助器,创建一个文档对象 Document doc= DocumentHelper.createDocument(); //2.给文档添加第一个节点(根节点) Element books=doc.addElement("books"); //3.通过根节点,丰富子节点 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",100+i+" "); } //4.创建一个文件输出流 FileOutputStream os=new FileOutputStream("D://Demo2.xml"); //5.将输出流转换为XML输出流 XMLWriter xw=new XMLWriter(os); //6.写出文档 xw.write(doc); //7.释放资源 xw.close(); System.out.println("打印完毕"); } }
4.JSON-GSON(google)
package JSON; import com.google.gson.Gson; public class Demo1 { public static void main(String[] args) { //1. 创建Gson对象 Gson g=new Gson(); Book b=new Book("100","金苹果","锄禾日当午"); String s = g.toJson(b); System.out.println(s); } }
GSON转换
package JSON; import com.google.gson.Gson; public class Demo2 { public static void main(String[] args) { //GOOGLE Json //1.创建Gson对象 Gson g=new Gson(); Book b=g.fromJson("{\"id\":\"100\",\"name\":\"金苹果\",\"info\":\"锄禾日当午\"}",Book.class); System.out.println(b.getId()); } }
5.JSON-fastJSON
package JSON; import com.alibaba.fastjson.JSON; public class Demo3 { public static void main(String[] args) { Book b=new Book("1002","唐诗三百首","床前明月光,地上鞋两双"); String json = JSON.toJSONString(b); System.out.println(json); } }
package JSON; import com.alibaba.fastjson.JSON; public class Demo4 { public static void main(String[] args) { //1. 转换 :{"id":"1002","info":"床前明月光,地上鞋两双","name":"唐诗三百首"} Object b = JSON.parse("{\"id\":\"1002\",\"info\":\"床前明月光,地上鞋两双\",\"name\":\"唐诗三百首\"}"); System.out.println(b); } }
6.Gson和Fastjson的区别
Gson是目前功能最强的Json解析神器, 可以通过toJson与fromJson两个转换函数两个函数进行对象的序列号和反序列化,可以对复杂类型的bean到json之间,进行转换,精确度无与伦比。同时,是无依赖,不需要例外额外的jar,能够直接跑在JDK上。
FastJson是阿里用Java语言编写的高性能的JSON处理器,在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。Gson的优势是转换复杂对象,性能消耗比FastJson大;而FastJson优势是解析转换复杂对象的速度最快,但是对一些复杂转换就会出现问题。
在开发中,如果性能满足的情况下,推荐使用Gson。因为亲遇到,对于复杂类型,比如原子类例如AtomicLong属性,fastjson会按照基本类型解析,而不是对象。这样会导致反序列化的时候数据不完整,所以,强烈建议Gson。