JSON转成JAVA对象

{'username':'xxx','password':'xxx','serviceType':'xxx','paramsObj':{'userName':'xxx','userPwd':'xxx'}}
形如这样的JSON很好解析。
一个这样的方法就可以解析了。
public static Object getJTO(String jsonString, Class clazz, Map map) {
JSONObject jsonObject = null;
try {
jsonObject = JSONObject.fromObject(jsonString.trim());
} catch (Exception e) {
e.printStackTrace();
}
return JSONObject.toBean(jsonObject, clazz, map);
}

其中map表示:
集合属性的类型 (key : 集合属性名, value : 集合属性类型class)
example:("paramsObj" : Bean.class)
其中class表示:整个JSON的对象。
但是如果遇到这样的JSON就不好解析了,问题待解决中,解决后跟踪,也请大家给予经验分享。
{'username':'xxx','password':'xx','serviceType':'xxx','paramsObj':{"passList":[{"passName":"xx","idType":"xx","idNo":"xxx","savePassenger":true}],"contactName":"xxx","contactMobilePhone":"xxx","contactEmail":"xxx","sendMethod":false}}

难点在于passList是一个list,而且list里放的是对象,如果用上面的解析方法会报
net.sf.ezmorph.bean.MorphDynaBean incompatible with XX异常。

当然好似可以用另外的方法例如:JSONObject.getJSONArray()。但要把JSON直接转化成一个JAVA类不知道有没有更好的方法。第一个Bean放最外层,第一个Bean包含第二个bean-paramsObj,第二个bean中放了一个list包括第三个bean属性有passName等等,这样延伸到第N个bean。
报异常是因为没有把list里放的类型指定给反射器。所以必须要指定map.put("A",A.class);而一般的嵌套对象可以不用指定。
问题解决。
最后代码如下:
//解析Json方法
public static Object getJTO(String jsonString, Class clazz, Map map) {
JSONObject jsonObject = null;
try {
jsonObject = JSONObject.fromObject(jsonString.trim());
} catch (Exception e) {
e.printStackTrace();
}
return JSONObject.toBean(jsonObject, clazz, map);
}
//调用解析Json前工作
map.put("passList", XX.class);
MobileRequest mobileRequest = (MobileRequest) JsonUtil.getJTO(
jsonString, XX.class, map);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值