Json、JavaBean、String等互转

本文介绍如何在Java中实现JSON、JavaBean及String之间的相互转换,包括简单类型的转换和复杂嵌套类型的处理方法。

Json、JavaBean、String等互转

本文介绍简单的Json、JavaBean、String互换(下文JavaBean简称Object对象,这里不是很严谨)

转换关系如下:

其中String和javaBean之间的转换可以通过“中间态”Json来完成。

先上代码,再补充解释

 

实体类

package com.blue.yanxishe.controller.app.market;
public class Student {
	private String name;
	private Integer age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}	
}

 实体类

package com.blue.yanxishe.controller.app.market;
public class MyStudent {
	private Student myStudent ;

	public Student getMyStudent() {
		return myStudent;
	}

	public void setMyStudent(Student myStudent) {
		this.myStudent = myStudent;
	}	
}  

 测试示例

 

package com.blue.yanxishe.controller.app.market;

import java.util.HashMap;
import java.util.Map;

import com.google.gson.JsonObject;

import net.sf.json.JSONObject;

public class JsonStudy {
	static String stuStr= "{\"name\":\"小明\",\"age\":18}"; 
	static JSONObject stu_json = JSONObject.fromObject(stuStr);
	public static void StringToJson(){
		 JSONObject stujson = JSONObject.fromObject(stuStr);
		System.out.println(stujson);//输出:{"name":"小明","age":18}
	}	
	public static void StringToObject(){
		JSONObject stujson = JSONObject.fromObject(stuStr);
		Student stuObject = (Student)JSONObject.toBean(stujson, Student.class);
		System.out.println("我的名字叫"+stuObject.getName()+",今年"+stuObject.getAge()+"岁!");	//输出:我的名字叫小明,今年18岁!
	}	
	public static void JsonToObject(){
		JSONObject stujson = JSONObject.fromObject(stuStr);
		Object stuObject = JSONObject.toBean(stujson, Student.class);
		Student stuEntity = (Student)stuObject;
		System.out.println("我的名字叫"+stuEntity.getName()+",今年"+stuEntity.getAge()+"岁!");	//	输出:我的名字叫小明,今年18岁!
	}
	public static void JsonToString(){
		String stuString = stu_json.toString();
		System.out.println(stuString);	//	输出:{"name":"小明","age":18}
	}
	public static void ObjectToJson(){
		Student stuObject = new Student();
		stuObject.setAge(new Integer(18));
		stuObject.setName("冬冬");
		JSONObject stuJson = JSONObject.fromObject(stuObject);
		System.out.println(stuJson);//{"name":"冬冬","age":18}
	}
	public static void ObjectToString(){
		Student stuObject = new Student();
		stuObject.setAge(new Integer(18));
		stuObject.setName("冬冬");
		JSONObject stuJson = JSONObject.fromObject(stuObject);
		String stuString = stuJson.toString();
		System.out.println(stuString);//输出:{"name":"冬冬","age":18}
	}
	public static void main(String[] args) {
		StringToJson();
		JsonToObject();
		JsonToObject();
		JsonToString();
		ObjectToJson();	
		ObjectToString();
	}
}

 

2019-02-27补充:

对于复杂的嵌套的实体类,可能会包报net.sf.ezmorph.bean.MorphDynaBean转换异常 

原因:由于需要转换的对象中存在其他对象的引用,并且在转换的时候没有指定对应的类,此时json会使用默认的bean进行动态转换MorphDynaBean,但是在使用的时候就会出现类型转换异常,代码参考如下

public class A implements Serializable{

    private static final long serialVersionUID = 1L;

    private List<B> b;
    private List<B> c;
    //get、set方法 省略
}

解决方法,在转换之前设置类信息,即显示说明实体类内部嵌套的类的类型

Map<String,Class<?>> classMap = new HashMap<String,Class<?>>();
classMap.put("b", B.class);
classMap.put("c", C.class);
JSONObject.toBean(jsonobject, A.class,classMap);

 

 

 

参考文献

 1-https://blog.youkuaiyun.com/sld880311/article/details/72841834

转载于:https://www.cnblogs.com/wobuchifanqie/p/7498794.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值