在Java中,我們經(jīng)常需要將對象轉(zhuǎn)換成XML或JSON格式,以便于數(shù)據(jù)的傳輸和存儲。這個過程就是序列化。Java提供了多種序列化的方式,其中XML和JSON是比較常用的兩種格式。
對于XML的序列化,我們可以使用Java提供的DOM或SAX API來實(shí)現(xiàn)。DOM API是一種將整個XML文檔加載到內(nèi)存中的方式,可以對文檔進(jìn)行隨意的遍歷和修改。而SAX API則是一種事件型的解析方式,可以在解析過程中對每個節(jié)點(diǎn)進(jìn)行相應(yīng)的處理。
// DOM方式 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.newDocument(); Element root = doc.createElement("person"); doc.appendChild(root); Element name = doc.createElement("name"); name.setTextContent("Tom"); root.appendChild(name); TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = tf.newTransformer(); t.setOutputProperty(OutputKeys.INDENT, "yes"); StringWriter sw = new StringWriter(); t.transform(new DOMSource(doc), new StreamResult(sw)); String xml = sw.toString(); System.out.println(xml);
// SAX方式 SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); DefaultHandler handler = new DefaultHandler(){ public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.println("start element: " + qName); } public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("end element: " + qName); } public void characters(char[] ch, int start, int length) throws SAXException { System.out.println("characters: " + new String(ch, start, length)); } }; sp.parse(new InputSource(new StringReader("")), handler); Tom
對于JSON的序列化,我們可以使用Java提供的Jackson或Gson庫來實(shí)現(xiàn)。這兩個庫都是比較成熟穩(wěn)定的庫,支持注解、反序列化等高級功能。
// 使用Jackson庫序列化為JSON ObjectMapper mapper = new ObjectMapper(); Person person = new Person("Tom", 18); String json = mapper.writeValueAsString(person); System.out.println(json);
// 使用Gson庫序列化為JSON Gson gson = new Gson(); Person person = new Person("Tom", 18); String json = gson.toJson(person); System.out.println(json);
無論是XML還是JSON的序列化,都可以通過相應(yīng)的庫來實(shí)現(xiàn)。我們只需要選擇一個合適的庫,并按照其提供的API來編寫代碼即可。