`
Caedmon
  • 浏览: 567 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

发两个工具类,JavaBean转换JSON和XML

阅读更多
就两个工具类而已,实际中应该比较实用。Json就不说了,xml主要是有类似java跟flash交互的情况下就会用的着。Json的是网上找的,Xml的是自己写的。JSON转换apache官网有个工具包,但是就为了这么个小功能去下几个工具包感觉有点浪费,而且有很多依赖包。
这里贴一下XmlHelper的代码吧。
package com.caedmon.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class XmlHelper {
	private String filename;
	private Document document;
	static Logger logger=Logger.getLogger(XmlHelper.class);
	/**
	 * 路径的包含的xml文件只需要有根节点就可,否则不是合法的xml文件无法解析
	 * */
	public XmlHelper(String filename){
		this.filename=filename;
    	SAXReader reader = new SAXReader();
    	File file = new File(filename);
    	InputStream is=null;
    	try {
    		is = new FileInputStream(file);
    		this.document=reader.read(is);
    	} catch (FileNotFoundException e) {
    		logger.info("未找到"+filename+"这个文件");
    	} catch (DocumentException e) {
    		logger.error(e);
		}
	}
	/**
	 * 清除原来根节点中的内容,如果保存之前不清楚的话,是在文档后追加,而不是重新写入
	 */
	public void clear(){
		document.getRootElement().clearContent();
	}
	/**
	 * 保存xml到指定路径
	 * */
    public void save(String filename) throws IOException{
    	//此处最好不要用FileWriter,会出现中文乱码
    	XMLWriter out = new XMLWriter(new FileOutputStream(this.filename));
    	out.write(document);
    	out.flush();
    	out.close();
  	}
    public XPath getXPath(Element element, String nsUrl, String nsName, String selectUrl){
    	Map nsMap = new HashMap();
    	nsMap.put(nsName, nsUrl);
    	XPath xPath = element.createXPath(selectUrl);
    	xPath.setNamespaceURIs(nsMap);
    	return xPath;
  }
  	public void save() throws IOException{
  	  save(this.filename);
    }
  	/**
  	 * 将指定对象转成xml表达的字符串
  	 * */
	public String format(Object object){
		Element element=document.getRootElement();
		try{
			if(
					object instanceof Integer||
					object instanceof Double||
					object instanceof String||
					object instanceof Character||
					object instanceof Byte||
					object instanceof Long||
					object instanceof Float||
					object instanceof Short
				){
					throw new IllegalArgumentException();
				}else if(object instanceof List<?>){
					insertList(element, (List<?>)object);
				}else if(object instanceof Map<?, ?>){
					insertMap(element, (Map<?,?>)object);
				}else if(object instanceof Set<?>){
					insertSet(element, (Set<?>)object);
				}else if(object instanceof Object[]){
					insertArray(element, (Object[])object);
				}else {
					insertObject(element,object);
				}
		}catch(IllegalAccessException e1){
			e1.printStackTrace();
		}catch(IllegalArgumentException e2){
			e2.printStackTrace();
		}
		return document.asXML();
	}
	public static Element insertObject(Element element,Object object) throws IllegalArgumentException, IllegalAccessException{
		if(object!=null){
			Class<?> clazz=object.getClass();
			//类节点的名字
			String classEName=toLowerHead(clazz.getSimpleName());
			Field[] fields=clazz.getDeclaredFields();
			Element classElement=element.addElement(classEName);
			for(Field field:fields){
				String name=field.getName();
				field.setAccessible(true);
				Object fieldObj=field.get(object);
				if(fieldObj==null){
					classElement.addAttribute(name, "");
				}else if(
					fieldObj instanceof Integer||
					fieldObj instanceof Double||
					fieldObj instanceof String||
					fieldObj instanceof Character||
					fieldObj instanceof Byte||
					fieldObj instanceof Long||
					fieldObj instanceof Float||
					fieldObj instanceof Short
				){
					String value=field.get(object).toString();
					classElement.addAttribute(name, value);
				}else if(fieldObj instanceof Date){
					Date date=(Date)fieldObj;
					SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
					String value=format.format(date);
					classElement.addAttribute(name, value);
				}else{
					Element child=classElement.addElement(name);
					if(fieldObj instanceof List<?>){
						insertList(child, (List<?>)fieldObj);
					}else if(fieldObj instanceof Map<?, ?>){
						insertMap(child, (Map<?,?>)fieldObj);
					}else if(fieldObj instanceof Set<?>){
						insertSet(child, (Set<?>)fieldObj);
					}else if(fieldObj instanceof Object[]){
						insertArray(child, (Object[])fieldObj);
					}else {
						insertObject(child,fieldObj);
					}
				}
			}
		}
		return element;
	}
	public static Element insertList(Element element,List<?> list) throws IllegalArgumentException, IllegalAccessException {
		for(Object object:list){
			insertObject(element, object);
		}
		return element;
	}
	public static Element insertMap(Element element,Map<?, ?> map) throws IllegalArgumentException, IllegalAccessException{
		Iterator<?> iterator=map.values().iterator();
		while(iterator.hasNext()){
			Object object=iterator.next();
			insertObject(element, object);
		}
		return element;
	}
	public static Element insertSet(Element element,Set<?> set) throws IllegalArgumentException, IllegalAccessException{
		Iterator<?> iterator=set.iterator();
		while(iterator.hasNext()){
			Object object=iterator.next();
			insertObject(element, object);
		}
		return element;
	}
	public static Element insertArray(Element element,Object[] array) throws IllegalArgumentException, IllegalAccessException {
		for(Object obj:array){
			insertObject(element, obj);
		}
		return element;
	}
	public static String toLowerHead(String simpleName){
		String begin=simpleName.substring(0,1).toLowerCase();
		String other=simpleName.substring(1,simpleName.length());
		return begin+other;
	}
}

有什么问题的话可以提出来,我也是才写出来没多久,可能会有问题的。。如果哪里不懂的话也可以问下,毕竟注释比较少。。
PS:东西比较简单,高抬贵手,别投隐藏,新手。。 就是让大家以后省点功夫。。
分享到:
评论

相关推荐

    JSON-lib框架,转换JSON、XML不再困难

    JSON-lib提供了一系列的工具类和方法来处理这些情况,如`JSONObject`、`JSONArray`、`JSONFunction`等,它们可以帮助你方便地构造和解析JSON结构。 总之,JSON-lib作为一个强大的Java库,简化了JSON和XML在Java应用...

    json、javaBean、xml互转的几种工具介绍

    在IT行业中,数据交换和序列化是至关重要的环节,json、JavaBean和XML作为常见的数据表示格式,它们之间的转换需求频繁出现。这篇博客主要探讨了几种用于这些格式互转的工具,下面将详细介绍这些工具及其使用方法。 ...

    json转xml所需jar包

    JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种广泛使用的数据交换格式,它们在处理网络数据传输、存储以及不同系统间的数据交互时起到关键作用。JSON以其简洁明了的结构和易读性受...

    java持久化工具类:JavaBean与XML

    DWR(Direct Web Remoting)是一个JavaScript和Java之间的通信库,可以将JavaBean对象透明地转换为JSON或XML,用于AJAX交互。 4. **配置文件**:许多Java应用使用XML文件存储配置信息,JavaBean可以用来封装这些...

    XStream在JavaBean与XML/JSON 之间相互转换

    **XStream:JavaBean与XML/JSON之间的转换大师** XStream是一个开源库,它为Java对象提供了简单且直观的XML序列化和反序列化的解决方案。它不仅能够将Java对象转换成XML,反之亦然,还能支持JSON格式的转换。这个...

    jackson操作json和javabean示例

    在这个名为"jackson操作json和javabean示例"的项目中,我们将深入探讨Jackson库的核心功能,特别是其流式API、工具类以及树型模型的使用。 1. **Jackson流式API**:流式API(Streaming API)是Jackson提供的低级别...

    javaBean 与 xml 互转

    在实际项目中,你可能会创建一个通用的工具类,包含上述方法,以便在任何需要JavaBean和XML互转的地方使用。在提供的`clientDemo`文件中,可能包含了这样的工具类示例,可以进一步研究和理解。 总结来说,JavaBean...

    通过fastjson实现各种格式与json之间的转换

    通过fastjson实现了JavaBean,list&lt;JavaBean&gt;,MAP,list等格式与json格式之间的转换,已经附带fastjson的包,包的版本为fastjson-1.1.36.jar

    javabean_map_string和json互转详细文档+例子

    JavaBean和Map以及String与JSON之间的转换在Java开发中是非常常见的操作。这涉及到Java对象的序列化和反序列化,通常用于数据交换或持久化存储。以下是对这些转换的详细解释和示例。 1. JavaBean到JSON JavaBean是...

    xmljson生成实体类

    标题“xmljson生成实体类”指的是一个工具,它可以自动化地将XML或JSON格式的数据转换为Java实体类。这种工具通常会分析XML或JSON结构,然后自动生成对应的Java类,这些类包含了与原始数据相对应的属性和getter/...

    Json工具类

    它支持多种Java类型到JSON的转换,包括集合、Map、JavaBean等。使用json-lib的示例如下: ```java import net.sf.json.JSONObject; public class JsonDemo { public static void main(String[] args) { User ...

    json工具包和js

    它的主要类包括JSONObject、JSONArray、XML等,适合进行简单的JSON操作。 FastJSON是阿里巴巴开发的JSON解析库,它的性能非常高,支持JavaBean、Map、Collection等类型的JSON转换。FastJSON的使用非常直观,如`JSON...

    json-lib 技术指南

    总的来说,JSON-lib 是一个功能丰富的工具,能够帮助开发者轻松地在 Java 世界和 JSON/XML 之间进行数据交换。其灵活的配置选项和丰富的功能使得它成为 Java 开发者处理 JSON 和 XML 数据的理想选择。通过熟练掌握 ...

    java与json互相转换的jar包

    在将Java对象转换为JSON时,如果对象是JavaBean,这个库可以帮助快速获取和设置属性值。 6. **xom-1.2.jar.zip**:XOM是一个XML对象模型库,主要用于XML处理。虽然主要针对XML,但有时在处理JSON数据时,可能需要与...

    java根据xml生成schema_xsd_生成javabean

    例如,`createPro_Xsd.bat`和`createPro_bean.bat`可能就是这样的批处理脚本,它们调用相应的工具或库(如JAXB或XJC)将XSD文件转换为Java源代码,生成对应的JavaBean类。 3. JAXB(Java Architecture for XML ...

    java中json解析转换需要的jar包和依赖包

    为了在Java中解析和转换JSON,开发者通常需要引入特定的库,如`json-lib`。本资源包提供了Java进行JSON操作所需的jar包和依赖,使开发者能够快速集成JSON处理功能而无需单独下载各个组件。 1. `json-lib-2.4-jdk15....

    java json api,json api

    例如,对于一个JavaBean,你可以使用`JSONUtils.toJSON(yourBean)`将其转换为JSON对象,然后用`JSONUtils.fromObject(jsonObj, YourBeanClass.class)`将其转换回来。 4. **JSON与XML的互转**:`json-lib`还提供了将...

    Java Web应用开发 45 课堂案例-应用JavaBean实现编码转换.docx

    `:在这个例子中,虽然没有直接使用到`java.util.*`中的任何类,但通常在编写JavaBean时,我们可能会使用到集合类或者其他工具类,所以这里引入了整个`util`包。 3. `public class Convert`:定义名为`Convert`的...

    json包括依靠包

    例如,当我们要将一个JavaBean转换为JSON时,`commons-beanutils`可以帮助我们轻松地访问和操作JavaBean的属性,然后`json-lib`则负责实际的JSON编码工作。反过来,当我们从JSON解析数据时,`json-lib`会将JSON对象...

Global site tag (gtag.js) - Google Analytics