javaBean之对象xml、json互转

在系统与系统交互之间,我们传输的时候都是以一种文本格式来传递数据信息的,接下来先讲解如何把javaBean转换为json和如何吧json转换为javaBean
首先能够将json和javaBean之间相互装换的工具也比较多,例如Gson、FastJson、Jackson等等
Gson示例:

public class GsonTest {
	Gson gson = new Gson();
	//测试单个对象
	public void objToJson(){
			String str =gson.toJson(new Person("name",1));
			System.out.println("装换之后json为:"+str);
			System.out.println("json转对象");
			Person proson = 	gson.fromJson(str, new TypeToken<Person>(){}.getType());
			System.out.println("name:"+proson.getName()+",age:"+proson.getAge());
			
		}
	//测试集合对象
	public void objsToJson(){
		List<Person> listP = new ArrayList<>();
		for(int i=0;i<100;i++){
			listP.add(new Person("name"+i,i));
		}
		String str = gson.toJson(listP);
		
	     System.out.println("集合装为json:"+str);
	     
	    List<Person> listP2= gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());
	     System.out.println("JSON转对象");
	    System.out.println("长度:"+listP2.size());
	    for(int k=0;k<listP2.size();k++){
	    	System.out.println("name:"+listP2.get(k).getName()+",age"+listP2.get(k).getAge());
	    	
	    }
	     
	}
	//测试map装集合形式,其实也就是测试了一下对象属性里面是集合的形式
	public void mapToJson(){
		
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("a", "1");
		map.put("b", "2");
		List<Person> listP = new ArrayList<>();
		for(int i=0;i<5;i++){
			listP.add(new Person("name"+i,i));
		}
		map.put("persons", listP);
		String str = gson.toJson(map);
		System.out.println("json:"+str);
		Map<String,Object> maps  = gson.fromJson(str, new TypeToken<Map<String,Object>>(){}.getType());
	        System.out.println("长度:"+maps.size());
	        //遍历
		 for(String key:map.keySet()){
			 //map的value存放的对象集合
			 System.out.println("key:"+key+" vlaue:"+map.get(key));
			 if("persons".equals(key)){
				 List<Person> listPs = (List<Person>)map.get(key);
				 for(int k = 0;k<listPs.size();k++){
					 System.out.println("name:"+listPs.get(k).getName()+",age"+listPs.get(k).getAge());
				 }
			 }
			 
		 }
	}
	public static void main(String[] args) {
		GsonTest gsonTest = new GsonTest();
		gsonTest.objsToJson();
		gsonTest.objToJson();
		gsonTest.mapToJson();
	}

}

以上基本上都是常用的几种互转的方式,FastJson、Jackson基本上也差不多;
2018-12-06注释,
遇到的现象,在javaBean转json 的时候,如果javaBean的属性为null时,转换的json没有这个key,代码如下:
简单的pojo

package com.it.code.json.javaBean;

public class Test1VO {
	private String name1;
	private String name2;
	private String name3;
	private String name4;
	private String name5;
	 
	public String getName1() {
		return name1;
	}
	public void setName1(String name1) {
		this.name1 = name1;
	}
	public String getName2() {
		return name2;
	}
	public void setName2(String name2) {
		this.name2 = name2;
	}
	public String getName3() {
		return name3;
	}
	public void setName3(String name3) {
		this.name3 = name3;
	}
	public String getName4() {
		return name4;
	}
	public void setName4(String name4) {
		this.name4 = name4;
	}
	public String getName5() {
		return name5;
	}
	public void setName5(String name5) {
		this.name5 = name5;
	}
	
}

现象和解决方式

//测试如果对象 的属性的值为null,则转换的json数据是没有这个key
	public static void test1(){
	       Test1VO test1vo = new Test1VO();
	       
	       test1vo.setName1("name1");
	       test1vo.setName2("name2");
	        
	       //属性值为null的时候,转换的json数据没有key
	       System.out.println(new Gson().toJson(test1vo));
	       //属性值为null的时候,转换的json数据key对应的值也是null
	       System.out.println(new GsonBuilder().serializeNulls().create().toJson(test1vo));
	       //可以用sonResult.replaceAll("null","\"\"")替换解决
	       System.out.println(new GsonBuilder().serializeNulls().create().toJson(test1vo).replaceAll("null", "\"\""));
	      
	       //有特殊符号的时候,=装换为\u003d
	       test1vo.setName3("DFDSF=");
	       System.out.println(new GsonBuilder().serializeNulls().create().toJson(test1vo).replaceAll("null", "\"\""));
		     
	       //忽略特殊字符
	       System.out.println(new GsonBuilder().disableHtmlEscaping().serializeNulls().create().toJson(test1vo).replaceAll("null", "\"\""));
			 
	}

JavaBean和XML格式之间互转,使用的工具为XStream,需要加载的jar包,包括xstream-[version].jar,xpp3-[version].jar并 xmlpull-[version].jar
以下是代码:
首先第一个Pojo对象:

import java.util.List;

import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("pojo") 
public class Pojo {
	@XStreamAlias("name") 
	private String name ;
	 @XStreamAlias("age") 
	private String age;
	 @XStreamAlias("list") 
	 private List<Pojo1> list;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public Pojo(String name, String age, List<Pojo1> list) {
		super();
		this.name = name;
		this.age = age;
		this.list = list;
	}
	public List<Pojo1> getList() {
		return list;
	}
	public void setList(List<Pojo1> list) {
		this.list = list;
	}
	public Pojo(String name, String age) {
		super();
		this.name = name;
		this.age = age;
	}
	public Pojo() {
		super();
		// TODO Auto-generated constructor stub
	}

}

第二个对象:

import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("pojo1") 
public class Pojo1 {
	@XStreamAlias("sum") 
	private String  sum;
	public String getSum() {
		return sum;
	}
	public void setSum(String sum) {
		this.sum = sum;
	}
	public Pojo1() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Pojo1(String sum) {
		super();
		this.sum = sum;
	}
}

示例代码

import java.util.ArrayList;
import java.util.List;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.XppDriver;
import com.xml.pojo.Pojo;
import com.xml.pojo.Pojo1;
public class testXML {
	public static String getXML(){
					System.out.println("对象开始转换为XML");
					String XML="";
					XStream xStream = new XStream(new XppDriver());
					Pojo p = new Pojo();
					p.setAge("1");
					p.setName("1");
					List<Pojo1> list = new ArrayList<Pojo1>();
					for(int i=1;i<10;i++){
						Pojo1 pojo1 = new Pojo1();
						pojo1.setSum(i+"");
						list.add(pojo1);
					}
					p.setList(list);
					//使用本类可以实现完全对象注解方式
					xStream.processAnnotations(Pojo.class);
					XML = xStream.toXML(p);
					System.out.println(XML);
					System.out.println("对象结束转换为XML");
					return XML;
				}
			    public static void fromOnject(String XML){
			    	System.out.println("XML开始转换为对象");
			    	System.out.println(XML);
			    	XStream xStream = new XStream(new XppDriver());
			    	//设置默认安全防护
			    	XStream.setupDefaultSecurity(xStream);
			    	//设置允许转化的类,不设置容易遭受到其他未知xml攻击
			    	xStream.allowTypes(new Class[]{Pojo.class, Pojo1.class});
			    	xStream.processAnnotations(Pojo.class);
					Pojo p  = (Pojo)xStream.fromXML(XML);				
					System.out.println(p.getAge());
					System.out.println(p.getName());
					List<Pojo1> pojo1s  = p.getList();
					for(int i = 0;i<pojo1s.size();i++){
						System.out.println(pojo1s.get(i).getSum());
					}					
					System.out.println("XML 转换为对象结束");
			    }				
				public static void main(String[] args) {			
					fromOnject(getXML()) ;
				}
	
}

以上两个对象都是简单的JavaBean对象,Pojo对象里面包含了一个Pojo1集合,其他都是简单的属性。
@XStreamAlias标签是给当前节点取别名,转换为xml数据之后的节点名称。
当然XStream还有其他一些标签例如XStreamImplicit、@XStreamConverter、@XStreamAsAttribute,都比较简单。以上就是javaBean与json/xml格式之间互相 转换的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值