jsp_XML_JSON
来源:互联网 发布:支持国密算法的浏览器 编辑:程序博客网 时间:2024/06/07 15:09
1: XML 1): 简介 指可扩展标记语言(eXtensible Markup Language) 2): 作用 被设计用来传输和存储数据 3): 示例 <?xml version="1.0" encoding="UTF-8"?> <users> <user id="1"> <id></id> <email></email> <password></password> </user> </users> 4): 命名规则 名称可以包含字母,数字以及其他的字符 名称不能以数字或者标点符号开始 名称不能以字母xml(或者XML, Xml等等)开始 名称不能包含空格 可以使用任何名称,没有保留的字词 5): 可以通过dom4j来操作xml 使用前提需要导入dom4j的jar包
package com.tz.servlet.xml;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.util.Iterator;import java.util.List;import javax.print.Doc;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.Node;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test;import com.tz.servlet.bean.User;public class Dom4jTest { /** * 解析xml文件 * @throws DocumentException */ @Test public void test1() throws DocumentException { //需要先创建一个SAXReader对象 SAXReader reader = new SAXReader(); InputStream stream = Dom4jTest.class.getClassLoader().getResourceAsStream("user.xml"); Document document = reader.read(stream); //获取到根节下所有的子元素 Element rootElement = document.getRootElement(); for(Iterator i = rootElement.elementIterator(); i.hasNext(); ) { Element element = (Element) i.next(); System.out.println(element); } System.out.println("-----------------------------------"); //遍历根节点下的所有的user子元素 for(Iterator i = rootElement.elementIterator("user"); i.hasNext(); ) { Element element = (Element) i.next(); //遍历user下的子元素 for(Iterator j = element.elementIterator(); j.hasNext(); ) { Element e = (Element) j.next(); //获取遍历遍历元素的名和值 //System.out.println(e.getName() +"="+ e.getTextTrim()); } //遍历元素上所有属性 for(Iterator<Element> n = element.attributeIterator(); n.hasNext(); ) { Attribute attr = (Attribute) n.next(); System.out.println(attr.getName() +"="+ attr.getValue()); } } } /** * 解析xml数据,生成实体对象 * @throws DocumentException */ @Test public void test2() throws DocumentException { //需要先创建一个SAXReader对象 SAXReader reader = new SAXReader(); InputStream stream = Dom4jTest.class.getClassLoader().getResourceAsStream("user.xml"); Document document = reader.read(stream); Element root = document.getRootElement(); for(Iterator i = root.elementIterator("user"); i.hasNext(); ) { Element userElement = (Element) i.next(); String id = userElement.element("id").getTextTrim(); String email = userElement.element("email").getTextTrim(); String password = userElement.element("password").getTextTrim(); User user = new User(Integer.parseInt(id), email, password); System.out.println(user); } } /** * 通过节点树来查找 * @throws DocumentException */ @Test public void test3() throws DocumentException { //需要先创建一个SAXReader对象 SAXReader reader = new SAXReader(); InputStream stream = Dom4jTest.class.getClassLoader().getResourceAsStream("user.xml"); Document document = reader.read(stream); List list = document.selectNodes("/users/user/email"); for(Iterator i = list.iterator(); i.hasNext(); ) { Element element = (Element) i.next(); System.out.println(element.getName() +"="+ element.getTextTrim()); } System.out.println("----"); //查询单一的节点 Node node = document.selectSingleNode("/users/user/email"); System.out.println(node.getName()+"==="+node.getText()); //获取指定属性的值 System.out.println(node.valueOf("@name")); System.out.println("---"); //根据选择器获取属性返回集体 List list2 = document.selectNodes("/users/user/email/@name"); for(Iterator j = list2.iterator(); j.hasNext(); ) { Attribute attr = (Attribute) j.next(); System.out.println(attr.getValue()); } } /** * 创建一个Document,然后输出到一个xml文件 * @throws IOException */ @Test public void test4() throws IOException { //创建一个Document对象 Document document = DocumentHelper.createDocument(); Element root = document.addElement("root"); //向document中添加元素 Element user = root.addElement("user"); user.addAttribute("id", "1"); //添加属性 Element id = user.addElement("id"); id.addText("01"); //添加文体值 Element email = user.addElement("email"); email.addText("123@qq.com"); Element password = user.addElement("password"); password.addText("123"); OutputFormat format = new OutputFormat("\t", true, "UTF-8"); XMLWriter writer = new XMLWriter(new FileWriter(new File("F:\\user.xml")), format); writer.write(document); //注意要关流 writer.close(); } /** * 复制其它的xml数据文件 * @throws DocumentException * @throws IOException */ @Test public void test5() throws DocumentException, IOException { //需要先创建一个SAXReader对象 SAXReader reader = new SAXReader(); InputStream stream = Dom4jTest.class.getClassLoader().getResourceAsStream("user.xml"); Document document = reader.read(stream); OutputFormat format = new OutputFormat("\t", true, "UTF-8"); XMLWriter writer = new XMLWriter(new FileWriter(new File("F:\\user.xml")), format); writer.write(document); writer.close(); } /** * 使用String 字符串 * @throws DocumentException * @throws IOException */ @Test public void test6() throws DocumentException, IOException { String text = "<root><user id=\"1\"><id>01</id><email>123@qq.com</email><password>123</password></user></root>"; Document document = DocumentHelper.parseText(text); OutputFormat format = new OutputFormat("\t", true, "UTF-8"); XMLWriter writer = new XMLWriter(new FileWriter(new File("F:\\user.xml")), format); writer.write(document); writer.close(); }}
2: JSON 1): 简介 JSON指的是JavaScript对象表示法(JavaScript Object Notation); 它是轻量级的文本数据交换格式且独立于语言,具有自我描述性,更易理解 2): 优点 JSON 比 XML更小,更快,更容易解析 如一般ajax数据传输则就会使用json 3): JSON的语法 以花括号保存数据(对象), 数据以键值对的形式存在, 且键需要打上双引号, 每一个键值对间需要以逗号隔开, 注意最后的一个键值对,不需要再加逗号, 它的值可以是数字,字符串(需要是双引号),逻辑值,数组,对象,null 4): 操作json数据的工具有(Gson,FastJson,Jackson,Json-lib); 推荐使用Gson; 5): Gson可以把一个java对象序列化成一个json字符串,也可以把一个json字符串反序列化成一个java对象
package com.tz.servlet.json;import java.lang.reflect.Type;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.junit.Test;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import com.tz.servlet.bean.User;public class GsonTest { /* * 序列化一个指定对象 转成 json串 */ @Test public void test1() { //需要先创建一个Gson对象 Gson gson = new Gson(); User user = new User(1, "123@qq.com", "123"); //把User对象序列化成一个json串 String userString = gson.toJson(user); System.out.println(userString); } /* * 序列化集合 */ @Test public void test2() { Gson gson = new Gson(); User user1 = new User(1, "123@qq.com", "123"); User user2 = new User(2, "456@qq.com", "456"); User user3 = new User(3, "789@qq.com", "789"); List<User> list = new ArrayList<User>(); list.add(user1); list.add(user2); list.add(user3); String userListString = gson.toJson(list); System.out.println(userListString); Map<String, User> map = new HashMap<String, User>(); map.put("user1", user1); map.put("user2", user2); map.put("user3", user3); String userMapString = gson.toJson(map); System.out.println(userMapString); } /* * 反序列化一个json字符串 转成一个对象 */ @Test public void test3() { Gson gson = new Gson(); String str = "{\"id\":1,\"email\":\"123@qq.com\",\"password\":\"123\"}"; User user = gson.fromJson(str, User.class); System.out.println(user); } /* * 反序列化一个json字符串 转成一个 List */ @Test public void test4() { Gson gson = new Gson(); String str = "[{\"id\":1,\"email\":\"123@qq.com\",\"password\":\"123\"},{\"id\":2,\"email\":\"456@qq.com\",\"password\":\"456\"},{\"id\":3,\"email\":\"789@qq.com\",\"password\":\"789\"}]"; Type type = new TypeToken<ArrayList<User>>() {}.getType(); ArrayList list = gson.fromJson(str, type); System.out.println(list); } /* * 反序列化一个json字符串 转成一个 Map */ @Test public void test5() { Gson gson = new Gson(); String str = "{\"user1\":{\"id\":1,\"email\":\"123@qq.com\",\"password\":\"123\"},\"user2\":{\"id\":2,\"email\":\"456@qq.com\",\"password\":\"456\"},\"user3\":{\"id\":3,\"email\":\"789@qq.com\",\"password\":\"789\"}}\r\n" + ""; Type type = new TypeToken<HashMap<String, User>>() {}.getType(); Map<String, User> map = gson.fromJson(str, type); System.out.println(map); }}
JSON转成js对象(解析成一个数组)