`
jenly
  • 浏览: 18246 次
文章分类
社区版块
存档分类
最新评论

XStream解析xml和json

 
阅读更多

XStream是一个在我看来比较好的一个第三方包了。因为它在解析时支持注解、这样很是方便,并且xml跟json这两种格式的文件都能进行解析,XStream本属于java的一个第三方包,甚是好用,若是拿它在android开发环境,也是能正常解析,但有点美中不足,因为android开发环境时,XStream不太支持json转对象,只支持对象转json,其他xml与对象的互转都支持。这样的话双解析就有了那么一点瑕疵之处,不过话说回来,没多少需求的数据交互会用json跟xml切来切去的,当只是json转对象时,可以用Gson.jar或Jsonlib.jar或其他的json解析。XStream.jar能支持注解,又支持xml和json双解析就已经很好了。


首先来了解注解的基本使用方法:

注解
@XStreamAlias别名注解
作用目标: 类,字段


@XStreamImplicit 隐式集合
@XStreamImplicit(itemFieldName="part")
作用目标: 集合字段


@XStreamConverter(SingleValueCalendarConverter.class) 注入转换器
作用目标: 对象


@XStreamAsAttribute 转换成属性
作用目标: 字段


@XStreamOmitField 忽略字段
作用目标: 字段


Auto-detect Annotations 自动侦查注解
xstream.autodetectAnnotations(true);


看下面的例子:

Student.java实体类

@XStreamAlias("Student")
public class Student implements Serializable{
	
	private static final long serialVersionUID = 1L;

	@XStreamAlias("name")
	private String name;
	
	@XStreamAlias("sex")
	private String sex;
	
	public Student(){
		
	}
	
	public Student(String name,String sex){
		this.name = name;
		this.sex = sex;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}
	
	
	@Override
	public String toString() {
		return getClass().getSimpleName() + ":{"+"name:" + name +",sex:" + sex+"}";
	}
	

}


	/**
	 * xml转bean
	 * @param xml
	 * @param clazz
	 * @return
	 */
	public static <T> T xmlToBean(String xml,Class<T>... clazz){
		
		T t = null;
		
		XStream xStream = new XStream(new Dom4JDriver()){    //xml转对象需要用到dom4j.jar包

			@Override
			protected MapperWrapper wrapMapper(MapperWrapper next) {
				return new MapperWrapper(next) {

					@Override
					public boolean shouldSerializeMember(Class definedIn,
							String fieldName) {
						
						if(definedIn == Object.class){
							try{
								return this.realClass(fieldName)!=null;
								
							}catch(Exception e){
								return false;
							}
						}
						
						return super.shouldSerializeMember(definedIn, fieldName);
					}
					
					
				};
			}
			
		};
		
		xStream.setMode(XStream.NO_REFERENCES);
		xStream.processAnnotations(clazz);
		
		t = (T)xStream.fromXML(xml);
		
		return t;
	}



	/**
	 * json转bean
	 * @param json
	 * @param clazz
	 * @return
	 */
	public static <T> T jsonToBean(String json,Class<T>... clazz){
		
		T t = null;
		
		XStream xStream = new XStream(new JettisonMappedXmlDriver()){    //json转对象时需要用到jettison.jar包

			@Override
			protected MapperWrapper wrapMapper(MapperWrapper next) {

				return new MapperWrapper(next) {

					@Override
					public boolean shouldSerializeMember(Class definedIn,
							String fieldName) {
						
						if(definedIn == Object.class){
							try{
								return this.realClass(fieldName)!=null;
								
							}catch(Exception e){
								return false;
							}
						}
						
						return super.shouldSerializeMember(definedIn, fieldName);
					}
					
					
				};
			
			}
			
		};
		
		xStream.setMode(XStream.NO_REFERENCES);
		xStream.processAnnotations(clazz);
		
		t = (T)xStream.fromXML(json);
		
		return t;
	}


main方法测试代码:

	public static void main(String[] args) {

		String json = "{'Student':{'name':'张三','sex':'男'}}";
		Student student1 = jsonToBean(json,Student.class);
		System.out.println(student1.toString());
		
		String xml = "<?xml version='1.0' encoding='utf-8'?><Student><name>李四</name><sex>女</sex></Student>";
		Student student2 = xmlToBean(xml,Student.class);
		System.out.println(student2.toString());
		
		
	}

打印结果如下:

Student:{name:张三,sex:男}
Student:{name:李四,sex:女}



分享到:
评论

相关推荐

    xstream将xml文档转换成json对象

    在IT领域,数据交换和存储经常需要在不同的格式之间转换,比如XML和JSON。XML(Extensible Markup Language)是一种结构化数据格式,广泛用于数据交换和配置文件,而JSON(JavaScript Object Notation)则因其简洁性...

    Xstream操作Xml与Json.doc

    Xstream 是一个 Java 库,用于处理 XML 文件的序列化和反序列化,同时也支持将 JavaBean 转换为 JSON 格式。它的核心理念是通过简单的 API 设计,使得 XML 序列化过程变得简洁,无需额外的映射文件或辅助类。 ### 1...

    转载 xStream完美转换XML、JSON

    压缩包中的"xmlTest"可能包含了一些示例代码或测试用例,用于演示如何使用xStream进行XML和JSON的转换。这些文件可以作为进一步学习和实践的基础,帮助开发者更好地理解和掌握xStream在实际项目中的应用。在实践中,...

    《xStream完美转换XML、JSON》学习笔记

    通过运行这些示例,你能够更好地掌握如何在实际项目中运用xStream进行XML和JSON的转换。 总之,xStream是一个强大且易用的工具,它简化了Java对象与XML、JSON之间的转换过程。熟练掌握xStream的使用,不仅可以提高...

    xStream完美转换XML、JSON

    《深入解析xStream:从XML到JSON的无缝转换》 在IT行业中,数据交换和存储是不可或缺的部分,而XML和JSON作为两种广泛使用的数据格式,它们各有优势。XML以其严谨的结构和丰富的元数据,适合复杂的文档存储和传输;...

    xml & json 转换工具

    - 解析XML文档,将其转换为DOM(Document Object Model)树。 - 使用如XStream这样的库,将DOM树转换为Java对象模型。 - 使用Json-lib,将Java对象转换为JSON字符串。 反之,JSON到XML的转换则反向进行: - JSON...

    xml解析及使用XStream实现javaBean与xml之间的转换

    在`xmlAnalysis`文件夹中,可能包含了一个简单的Java程序,演示了如何使用DOM、SAX、StAX和XStream解析XML文件,并展示了XStream如何在JavaBean与XML之间进行转换。你可以运行这些代码,观察输出结果,以加深理解。...

    xml 与json转换代码

    使用JUnit或其他测试框架,编写测试方法,分别测试XML到JSON和JSON到XML的过程,并比较转换前后的数据是否一致。 ```java import org.junit.Test; import static org.junit.Assert.assertEquals; public class ...

    使用XStream是实现XML与Java对象的转换(5)--Object Stream

    首先,XStream是一个开源库,由Johannes Leutenegger创建,它通过简单的API提供XML序列化和反序列化。这个库的特点在于它能够将Java对象直接映射到XML,反之亦然,而无需编写大量的代码。 在开始使用XStream之前,...

    json XStream

    另外,`xpp3_min-1.1.4c.jar`是XPP3库的一个版本,它是XStream用来解析XML文档的库,对于理解XStream的工作原理也非常重要。 接下来,为了启用JSON支持,我们需要配置XStream实例。这通常包括创建XStream对象,然后...

    XML、JAVA、JSON多种方式互相转换

    首先,我们需要解析XML到一个`org.w3c.dom.Document`对象,然后使用`readValue`方法将其转换为JSON字符串。 - 使用Java的Gson库:Gson库不直接支持XML到JSON的转换,但可以借助第三方库如`...

    Xstream for Json 完整范例(绝对好用)

    Jettison是一个实现了JSON和XML之间互转的开源项目,它与Xstream的集成使得JSON处理变得更加便捷。 要实现JSON序列化,首先需要在项目中添加Xstream和Jettison的依赖。在本示例中,`xstream-1.3.1.jar`是Xstream的...

    xStream完美转换XML.docx

    总之,xStream是一个功能强大且灵活的工具,能够方便地处理Java对象与XML和JSON之间的转换,极大地简化了数据序列化和反序列化的任务,尤其是在互联网应用中,对于数据交换和存储具有很高的实用价值。

    XStream 解析 android

    本文将深入探讨XStream如何在Android环境中解析XML文件,以及其主要特性和优势。 XStream的核心功能是能够将Java对象转换为XML字符串,并反之将XML字符串转换回Java对象。这种转换过程被称为对象XML绑定。XStream的...

    03-Java核心类库_XML与JSON(配套工具)

    03-Java核心类库_XML与JSON(配套工具)。包含fastjson-1.2.70.jar、gson-2.8.6.jar、dom4j-1.6.1.jar、jaxen-1.1-beta-7.jar、xstream-1.3.1.jar。

    XStream转换

    请注意,这个转换可能不会保留XML的所有结构,因为JSON和XML在表示数据结构方面存在差异。 ### 自定义序列化和反序列化行为 XStream允许自定义序列化和反序列化过程,例如改变字段名、忽略某些字段或处理特殊类型。...

    xStream解析工具包

    Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列...

    XStream示例(含jar包)

    这个示例可能包含了一个或多个演示如何使用 XStream 进行对象和 XML/JSON 之间转换的 Java 应用程序。这些示例可能包括创建对象、序列化为 XML/JSON、然后反序列化回对象的完整流程。通过运行提供的 jar 包,你可以...

    xstream-1.4.3

    《XStream 1.4.3:Java Bean到XML与JSON转换的秘密武器》 XStream,这个小巧而强大的库,自版本1.4.3以来,一直是Java开发者处理对象序列化和反序列化的首选工具。它以其简洁的API、高效的性能和对多种格式的支持...

    微信开发用到的jar包:json 解析,dom4j-1.6.1.jar,xstream-1.3.1.jar

    在微信开发过程中,经常会涉及到与服务器的交互,这时就需要用到JSON解析库、XML处理库等工具。以下是对标题和描述中提及的几个关键知识点的详细介绍: 1. JSON解析: JSON (JavaScript Object Notation) 是一种轻...

Global site tag (gtag.js) - Google Analytics