ext json字符串转java对象_Java中Bean与Map/Json/DBObject的相互转换 (转)

Java中Bean与Map/Json/DBObject的相互转换

1.JavaBean [java] view plaincopy public class Person {

private String name;

private Integer age;

private String job;

private List school;

private String address;

private List score;

//省略get/set方法

}

[java] view plaincopy public class Score {

private String cource_name;

private Integer cource_score;

//省略get/set方法

}

2.JavaBean与Map相互转换(使用Apache Commons的BeanUtil实现) [java] view plaincopy //Map转成JavaBean

//测试已通过,Bean中包含另一个Bean成员也可以

public static Object transMap2Bean(Map map, Object obj) {

if (map == null || obj == null) {

return null;BeanUtils

}

try {

BeanUtils.populate(obj, map);

} catch (Exception e) {

e.printStackTrace();

return null;

}

return obj;

}

//JavaBean转成Map

//测试已通过,Bean中包含另一个Bean成员也可以

public static Map transBean2Map(Object obj) {

if (obj == null) {

return null;

}

Map map = new HashMap();

try {

BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());

PropertyDescriptor[] propertyDescriptors = beanInfo

.getPropertyDescriptors();

for (PropertyDescriptor property : propertyDescriptors) {

String key = property.getName();

// 过滤class属性

if (!key.equals("class")) {

// 得到property对应的getter方法

Method getter = property.getReadMethod();

Object value = getter.invoke(obj);

map.put(key, value);

}

}

} catch (Exception e) {

e.printStackTrace();

return null;

}

return map;

}

3.JavaBean与Json相互转换(使用JSONObject实现,需要导入json-lib.jar) [java] view plaincopy //json字符串转成JavaBean

//测试已通过

@SuppressWarnings("unchecked")

public static T json2Bean(String jsonString, Class beanCalss) {

JSONObject jsonObject = JSONObject.fromObject(jsonString);

T bean = (T) JSONObject.toBean(jsonObject, beanCalss);

return bean;

}

//JavaBean转成json字符串

//测试已通过

public static String beanToJson(Object bean) {

JSONObject json = JSONObject.fromObject(bean);

return json.toString();

}

4.JavaBean与DBObject相互转换(DBObject是MongoDB在Java驱动是使用的类) [java] view plaincopy //DBObject转换成JavaBean

//测试已通过

public static T dbObject2Bean(DBObject dbObject, T bean) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {

if (bean == null) { //测试已通过

return null;

}

Field[] fields = bean.getClass().getDeclaredFields();

for (Field field : fields) {

String varName = field.getName();

Object object = dbObject.get(varName);

if (object != null) {

BeanUtils.setProperty(bean, varName, object);

}

}

return bean;

}

@SuppressWarnings("unchecked")

public static DBObject bean2DBObject(T bean) throws IllegalArgumentException, IllegalAccessException {

if (bean == null) {

return null;

}

DBObject dbObject = new BasicDBObject();

// 获取对象对应类中的所有属性域

Field[] fields = bean.getClass().getDeclaredFields();

for (Field field : fields) {

// 获取属性名

String varName = field.getName();

// 修改访问控制权限

boolean accessFlag = field.isAccessible();

if (!accessFlag) {

field.setAccessible(true);

}

Object param = field.get(bean);

if (param == null) {

continue;

} else if (param instanceof Integer) {// 判断变量的类型

int value = ((Integer) param).intValue();

dbObject.put(varName, value);

} else if (param instanceof String) {

String value = (String) param;

dbObject.put(varName, value);

} else if (param instanceof Double) {

double value = ((Double) param).doubleValue();

dbObject.put(varName, value);

} else if (param instanceof Float) {

float value = ((Float) param).floatValue();

dbObject.put(varName, value);

} else if (param instanceof Long) {

long value = ((Long) param).longValue();

dbObject.put(varName, value);

} else if (param instanceof Boolean) {

boolean value = ((Boolean) param).booleanValue();

dbObject.put(varName, value);

} else if (param instanceof Date) {

Date value = (Date) param;

dbObject.put(varName, value);

} else if (param instanceof List) {

List list = (List) param;

dbObject.put(varName, list);

} else if (param instanceof Map) {

Map map = (Map) param;

dbObject.put(varName, map);

}

// 恢复访问控制权限

field.setAccessible(accessFlag);

}

return dbObject;

}

5.测试代码 [java] view plaincopy package test;

import java.lang.reflect.InvocationTargetException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.junit.Before;

import org.junit.Test;

import com.mongodb.BasicDBObject;

import com.mongodb.DBObject;

import com.zmy.bean.Person;

import com.zmy.bean.Score;

import com.zmy.util.BeanUtil;

import com.zmy.util.DBObjectUtil;

public class ConvertTest {

private Person person = null;

private Map map = null;

@Before

public void initBean(){

person = new Person();

Score score1 = new Score();

Score score2 = new Score();

person.setAddress("大连");

person.setAge(21);

person.setJob("coder");

person.setName("zmy");

List schools = new ArrayList();

List scores = new ArrayList();

schools.add("DLUT");

score1.setCource_name("course1");

score1.setCource_score(85);

score2.setCource_name("course2");

score2.setCource_score(80);

scores.add(score1);

scores.add(score2);

person.setSchool(schools);

person.setScore(scores);

}

@Before

public void initMap(){

map = new HashMap();

map.put("address", "大连");

map.put("name", "zmy");

map.put("job", "coder");

map.put("age", 21);

List schools = new ArrayList();

schools.add("DLUT");

schools.add("HUK");

map.put("school", schools);

List scores = new ArrayList();

Score score1 = new Score();

Score score2 = new Score();

score1.setCource_name("course1");

score1.setCource_score(85);

score2.setCource_name("course2");

score2.setCource_score(80);

scores.add(score1);

scores.add(score2);

map.put("score", scores);

}

@Test

public void testBean2Map(){

Map map = BeanUtil.transBean2Map(person);

System.out.println(map.toString());

}

@Test

public void testMap2Bean(){

Person person = (Person) BeanUtil.transMap2Bean(map, new Person());

System.out.println(person.getName());

}

@Test

public void testBean2Json(){

String json = BeanUtil.beanToJson(person);

System.out.println(json);

Person person2 = BeanUtil.json2Bean(json, Person.class);

System.out.println(person2.getName());

}

@Test

public void testDBObject2Bean(){

DBObject dbObject = new BasicDBObject(map);

try {

Person p = BeanUtil.dbObject2Bean(dbObject, new Person());

System.out.println(p.getName());

} catch (IllegalAccessException | InvocationTargetException

| NoSuchMethodException e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("转换error!!!");

}

}

@Test

public void testBean2DBObject(){

try {

DBObject dbObject = DBObjectUtil.bean2DBObject(person);

System.out.println(dbObject.get("score"));

System.out.println(person.getScore());

} catch (IllegalArgumentException | IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("转换error!!!");

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值