关于flexjson将json转为javabean的使用

   该文章仅做自己日后参考,复习用。

   需要引的包:flexjson-2.1.jar

 划水一个月开始做了点公司的项目,实现一个接口,实现将json数据转为javabean。公司用的是flexjson,于是去网上查了资料,关于flexjson将json转为javabean的太少(可能我要的方式少了)只找到一篇案例,做了发现那个案例中有一些错误,调了半天,后来在项目经理的指导下写过。

   上案例:


	public static UserData toBean(String JsonStr){
		UserData data=null;
		try {
			data = new JSONDeserializer<UserData>().deserialize(JsonStr

		} catch (Exception e) {
			e.printStackTrace();
		}
			
		return data;
	}
	

这个是将一个json数据转为一个UserData的对象json是{"id":42,"cityCode":“557”}这种格式。

二:

	public static List<UserData> toListBean(String str){
		List<UserData> list = null;
		try {
			list = new JSONDeserializer<List<UserData>>().use("userinfo",ArrayList.class).use("values", UserData.class).deserialize(str);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}

这个是将json数据转为List<UserData>的形式,传入的是json数组[{“id”:42,"city":"557"},{“id”:42,"city":"557"}]

三:

public class JSONInfo<T> {
		private int errCode;
		private String errMsg;
		private List<T> userinfo; 
		private Long updateTime;
		
		public int getErrCode() {
			return errCode;
		}
		public void setErrCode(int errCode) {
			this.errCode = errCode;
		}
		public String getErrMsg() {
			return errMsg;
		}
		public void setErrMsg(String errMsg) {
			this.errMsg = errMsg;
		}
		public Long getUpdateTime() {
			return updateTime;
		}
		public void setUpdateTime(Long updateTime) {
			this.updateTime = updateTime;
		}
		public List<T> getUserinfo() {
			return userinfo;
		}
		public void setUserinfo(List<T> userinfo) {
			this.userinfo = userinfo;
		}
}

这个是嵌套json要用到的bean对象,具体看网上找到的那个,但是网上找到的一个他的承载json的字段是T 类型的,之前在写的时候怎么也调不通,后来项目经理来改成了List<T>就可以了(debug时其他字段都是有值唯独中间的获取不到)json格式是:{\"errCode\":0,\"errMsg\":\"成功\",       \"userinfo\":[{\"id\":42,\"cityCode\":\"577\",\"userCode\":\"12312345\",\"userName\":\"1234\",\"userType\":\"1\",\"operateTime\":1447839916000,\"operateType\":1},{\"id\":44,\"cityCode\":\"577\",\"userCode\":\"12312345\",\"userName\":\"1234\",\"userType\":\"1\"}]       ,\"updateTime\":147988147631}(中间用空格隔了一点方便查看格式)


	public static JSONInfo<List<UserData>> toBean2(String JsonStr){
		JSONInfo<List<UserData>> info = null;
		try {
			info = new JSONDeserializer<JSONInfo<List<UserData>>>()
					.use("userinfo", ArrayList.class).use("userinfo.values", UserData.class)
					.deserialize(JsonStr,JSONInfo.class);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return info;
	}

但是这样用到的是反射的形式,有很大的局限性,也就是说,use("userinfo", ArrayList.class)这语句里面你的String是要和JSONInfo里的字段是一致的JSOInfo里面要有get和set方法。这样没写一个bean都要有一个对应的JSONInfo。于是有下面的


四:

//测试List的
	public static void getMM(String json){
		try {
			
			int i =0;
			System.out.println(i);
			List<BerthData> list = null;
//			Object obj = new JSONDeserializer().deserialize(json);
//			Map map = (Map) new JSONDeserializer().deserialize(json);
//			List list = (List) map.get("userinfo");
//			String str = list.get(0).toString();
//			List list = (List) new JSONDeserializer().deserialize(json,ArrayList.class);
//			Object obj = list.get(0);
//			System.out.println(obj);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	//测试类
	public static void getDataBean(String jsonStr){
		try {
			BerthData userData = BerthData.gertBerthData(jsonStr);
			System.out.println(userData);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	//测试map
	public static void getMap(String jsonStr){
		try {
			Map map = BaseData.getMap(jsonStr);
			System.out.println(map);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
flexjson是可以通过直接 new JSONDeserializer().deserialize(json) 这样来取的,返回的对象你直接定义,得到的是一个HashMap,你可以通过get(key)来获取到数据,获取嵌套模式时,通过get("userinfo")来获取到一个LIst集合,而list集合里面存储的是键值对,也是Map的形式可以获取,然后在吧获取到的值通过bean的set方法添加到具体的类里面,这样十分的灵活,如下面的类里面的方法:

	
	public static List<UserData> getUserDataList(String json){
		List<UserData> userDatas = new ArrayList<UserData>();
		List list = (List) deserializer.deserialize(json,ArrayList.class);
		for(int i=0;i<list.size();i++){
			UserData userData = new UserData();
			Map map = (Map) list.get(i);
			userData.setId((Long.valueOf(map.get("id")+"")) );
			userData.setCityCode((String) map.get("cityCode"));
			userData.setUserCode((String) map.get("userCode"));
			userData.setUserName((String) map.get("userName"));
			userData.setUserType((String) map.get("userType"));
			userData.setOperateType((int) map.get("operateType"));
			userData.setOperateTime((Long.valueOf(map.get("operateTime")+"")) );
			userDatas.add(userData);
			System.out.println(userData);
		}
		return userDatas;
	}
	
	public static UserData gertUserData(String json){
		UserData userData = new UserData();
		Map map = (Map) deserializer.deserialize(json,Map.class);
		userData.setId((Long.valueOf(map.get("id")+"")));
		userData.setCityCode((String) map.get("cityCode"));
		userData.setUserCode((String) map.get("userCode"));
		userData.setUserName((String) map.get("userName"));
		userData.setUserType((String) map.get("userType"));
		userData.setOperateType((int) map.get("operateType"));
		userData.setOperateTime((Long.valueOf(map.get("operateTime")+"")));
		return userData;
	}
	

base类里面:


public class BaseData {
		protected static JSONDeserializer deserializer = new JSONDeserializer();
		
		public static Map getMap(String json){
			Map map = (Map) deserializer.deserialize(json,Map.class);
		    return map;
		}
}



  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值