就两个工具类而已,实际中应该比较实用。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提供了一系列的工具类和方法来处理这些情况,如`JSONObject`、`JSONArray`、`JSONFunction`等,它们可以帮助你方便地构造和解析JSON结构。 总之,JSON-lib作为一个强大的Java库,简化了JSON和XML在Java应用...
在IT行业中,数据交换和序列化是至关重要的环节,json、JavaBean和XML作为常见的数据表示格式,它们之间的转换需求频繁出现。这篇博客主要探讨了几种用于这些格式互转的工具,下面将详细介绍这些工具及其使用方法。 ...
JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种广泛使用的数据交换格式,它们在处理网络数据传输、存储以及不同系统间的数据交互时起到关键作用。JSON以其简洁明了的结构和易读性受...
DWR(Direct Web Remoting)是一个JavaScript和Java之间的通信库,可以将JavaBean对象透明地转换为JSON或XML,用于AJAX交互。 4. **配置文件**:许多Java应用使用XML文件存储配置信息,JavaBean可以用来封装这些...
**XStream:JavaBean与XML/JSON之间的转换大师** XStream是一个开源库,它为Java对象提供了简单且直观的XML序列化和反序列化的解决方案。它不仅能够将Java对象转换成XML,反之亦然,还能支持JSON格式的转换。这个...
在这个名为"jackson操作json和javabean示例"的项目中,我们将深入探讨Jackson库的核心功能,特别是其流式API、工具类以及树型模型的使用。 1. **Jackson流式API**:流式API(Streaming API)是Jackson提供的低级别...
在实际项目中,你可能会创建一个通用的工具类,包含上述方法,以便在任何需要JavaBean和XML互转的地方使用。在提供的`clientDemo`文件中,可能包含了这样的工具类示例,可以进一步研究和理解。 总结来说,JavaBean...
通过fastjson实现了JavaBean,list<JavaBean>,MAP,list等格式与json格式之间的转换,已经附带fastjson的包,包的版本为fastjson-1.1.36.jar
JavaBean和Map以及String与JSON之间的转换在Java开发中是非常常见的操作。这涉及到Java对象的序列化和反序列化,通常用于数据交换或持久化存储。以下是对这些转换的详细解释和示例。 1. JavaBean到JSON JavaBean是...
标题“xmljson生成实体类”指的是一个工具,它可以自动化地将XML或JSON格式的数据转换为Java实体类。这种工具通常会分析XML或JSON结构,然后自动生成对应的Java类,这些类包含了与原始数据相对应的属性和getter/...
它支持多种Java类型到JSON的转换,包括集合、Map、JavaBean等。使用json-lib的示例如下: ```java import net.sf.json.JSONObject; public class JsonDemo { public static void main(String[] args) { User ...
它的主要类包括JSONObject、JSONArray、XML等,适合进行简单的JSON操作。 FastJSON是阿里巴巴开发的JSON解析库,它的性能非常高,支持JavaBean、Map、Collection等类型的JSON转换。FastJSON的使用非常直观,如`JSON...
总的来说,JSON-lib 是一个功能丰富的工具,能够帮助开发者轻松地在 Java 世界和 JSON/XML 之间进行数据交换。其灵活的配置选项和丰富的功能使得它成为 Java 开发者处理 JSON 和 XML 数据的理想选择。通过熟练掌握 ...
在将Java对象转换为JSON时,如果对象是JavaBean,这个库可以帮助快速获取和设置属性值。 6. **xom-1.2.jar.zip**:XOM是一个XML对象模型库,主要用于XML处理。虽然主要针对XML,但有时在处理JSON数据时,可能需要与...
例如,`createPro_Xsd.bat`和`createPro_bean.bat`可能就是这样的批处理脚本,它们调用相应的工具或库(如JAXB或XJC)将XSD文件转换为Java源代码,生成对应的JavaBean类。 3. JAXB(Java Architecture for XML ...
为了在Java中解析和转换JSON,开发者通常需要引入特定的库,如`json-lib`。本资源包提供了Java进行JSON操作所需的jar包和依赖,使开发者能够快速集成JSON处理功能而无需单独下载各个组件。 1. `json-lib-2.4-jdk15....
例如,对于一个JavaBean,你可以使用`JSONUtils.toJSON(yourBean)`将其转换为JSON对象,然后用`JSONUtils.fromObject(jsonObj, YourBeanClass.class)`将其转换回来。 4. **JSON与XML的互转**:`json-lib`还提供了将...
`:在这个例子中,虽然没有直接使用到`java.util.*`中的任何类,但通常在编写JavaBean时,我们可能会使用到集合类或者其他工具类,所以这里引入了整个`util`包。 3. `public class Convert`:定义名为`Convert`的...
例如,当我们要将一个JavaBean转换为JSON时,`commons-beanutils`可以帮助我们轻松地访问和操作JavaBean的属性,然后`json-lib`则负责实际的JSON编码工作。反过来,当我们从JSON解析数据时,`json-lib`会将JSON对象...