JSON转成JAVA对象

来源:互联网 时间:1970-01-01

{'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);




相关阅读:
Top