基于JSON和java对象的互转方法
先说下我自己的理解,一般而言,JSON字符串要转为java对象需要自己写一个跟JSON一模一样的实体类bean,然后用bean.class作为参数传给对应的方法,实现转化成功。
上述这种方法太麻烦了。其实有一种东西叫jsonObject可以直接不用新建实体类bean,而实现转化,先说org.json.JSONObject这个JSONObject,贴上代码:
importjava.beans.IntrospectionException; importjava.beans.Introspector; importjava.beans.PropertyDescriptor; importjava.util.ArrayList; importjava.util.HashMap; importjava.util.Iterator; importjava.util.List; importjava.util.Map; importjava.util.Set; importorg.json.JSONObject; /** *Json工具类,实现了实体类和Json数据格式之间的互转功能使用实例:
*/ publicclassJsonUtils{ /** *将一个实体类对象转换成Json数据格式 * *@parambean *需要转换的实体类对象 *@return转换后的Json格式字符串 */ privatestaticStringbeanToJson(Objectbean){ StringBuilderjson=newStringBuilder(); json.append("{"); PropertyDescriptor[]props=null; try{ props=Introspector.getBeanInfo(bean.getClass(),Object.class) .getPropertyDescriptors(); }catch(IntrospectionExceptione){ } if(props!=null){ for(inti=0;ilist){ StringBuilderjson=newStringBuilder(); json.append("["); if(list!=null&&list.size()>0){ for(Objectobj:list){ json.append(objToJson(obj)); json.append(","); } json.setCharAt(json.length()-1,']'); }else{ json.append("]"); } returnjson.toString(); } /** *将一个对象数组转换成Json数据格式返回 * *@paramarray *需要进行转换的数组对象 *@return转换后的Json数据格式字符串 */ privatestaticStringarrayToJson(Object[]array){ StringBuilderjson=newStringBuilder(); json.append("["); if(array!=null&&array.length>0){ for(Objectobj:array){ json.append(objToJson(obj)); json.append(","); } json.setCharAt(json.length()-1,']'); }else{ json.append("]"); } returnjson.toString(); } /** *将一个Map对象转换成Json数据格式返回 * *@parammap *需要进行转换的Map对象 *@return转换后的Json数据格式字符串 */ privatestaticStringmapToJson(Map,?>map){ StringBuilderjson=newStringBuilder(); json.append("{"); if(map!=null&&map.size()>0){ for(Objectkey:map.keySet()){ json.append(objToJson(key)); json.append(":"); json.append(objToJson(map.get(key))); json.append(","); } json.setCharAt(json.length()-1,'}'); }else{ json.append("}"); } returnjson.toString(); } /** *将一个Set对象转换成Json数据格式返回 * *@paramset *需要进行转换的Set对象 *@return转换后的Json数据格式字符串 */ privatestaticStringsetToJson(Set>set){ StringBuilderjson=newStringBuilder(); json.append("["); if(set!=null&&set.size()>0){ for(Objectobj:set){ json.append(objToJson(obj)); json.append(","); } json.setCharAt(json.length()-1,']'); }else{ json.append("]"); } returnjson.toString(); } privatestaticStringstringToJson(Strings){ if(s==null){ return""; } StringBuildersb=newStringBuilder(); for(inti=0;i ='\u0000'&&ch<='\u001F'){ Stringss=Integer.toHexString(ch); sb.append("\\u"); for(intk=0;k<4-ss.length();k++){ sb.append('0'); } sb.append(ss.toUpperCase()); }else{ sb.append(ch); } } } returnsb.toString(); } publicstaticStringobjToJson(Objectobj){ StringBuilderjson=newStringBuilder(); if(obj==null){ json.append("\"\""); }elseif(objinstanceofNumber){ Numbernum=(Number)obj; json.append(num.toString()); }elseif(objinstanceofBoolean){ Booleanbl=(Boolean)obj; json.append(bl.toString()); }elseif(objinstanceofString){ json.append("\"").append(stringToJson(obj.toString())).append("\""); }elseif(objinstanceofObject[]){ json.append(arrayToJson((Object[])obj)); }elseif(objinstanceofList){ json.append(listToJson((List)obj)); }elseif(objinstanceofMap){ json.append(mapToJson((Map)obj)); }elseif(objinstanceofSet){ json.append(setToJson((Set)obj)); }else{ json.append(beanToJson(obj)); } returnjson.toString(); } /** *@Title:json2Map *@Creater:chencc
*@Date:2011-3-28
*@Description:TODO转化json2map *@param@paramjsonString *@param@return *@returnMap*@throws */ @SuppressWarnings("unchecked") publicstaticMap json2Map(StringjsonString){ Map map=newHashMap (); try{ if(null!=jsonString&&!"".equals(jsonString)){ JSONObjectjsonObject=newJSONObject(jsonString); IteratorkeyIter=jsonObject.keys(); Stringkey=""; Objectvalue=null; while(keyIter.hasNext()){ key=(String)keyIter.next(); value=jsonObject.get(key); map.put(key,value); } } }catch(Exceptione){ e.printStackTrace(); } returnmap; } //测试方法 publicstaticvoidmain(String[]args){ Map params=newHashMap (); params.put("callId123",Integer.valueOf(1000)); MapretMap=newHashMap(); retMap.put("params",params); retMap.put("result",true); Listls=newArrayList(); ls.add(newHashMap()); ls.add("helloworld!!"); ls.add(newString[4]); retMap.put("list",ls); String[]strArray=newString[10]; strArray[1]="first"; strArray[2]="2"; strArray[3]="3"; System.out.println("Boolean:"+JsonUtils.objToJson(true)); System.out.println("Number:"+JsonUtils.objToJson(23.3)); System.out.println("String:"+JsonUtils.objToJson("sdhfsjdgksdlkjfk\"sd,!#%$^&*#(*@&*%&*$fsdfsdfsdf")); System.out.println("Map:"+JsonUtils.objToJson(retMap)); System.out.println("List:"+JsonUtils.objToJson(ls)); System.out.println("Array:"+JsonUtils.objToJson(strArray)); Stringjson=JsonUtils.objToJson(retMap); Mapr=JsonUtils.json2Map(json); System.out.println(r.get("callId123")); } }
再来聊聊net.sf.json.JSONObject这个JSONObject,代码如下
importjava.io.IOException; importjava.text.SimpleDateFormat; importjava.util.ArrayList; importjava.util.HashMap; importjava.util.LinkedHashMap; importjava.util.List; importjava.util.Map; importjava.util.TimeZone; importnet.sf.json.JSONArray; importnet.sf.json.JSONObject; importnet.sf.json.JsonConfig; importnet.sf.json.util.CycleDetectionStrategy; importnet.sf.json.util.PropertyFilter; importcom.fasterxml.jackson.annotation.JsonInclude.Include; importcom.fasterxml.jackson.databind.DeserializationFeature; importcom.fasterxml.jackson.databind.ObjectMapper; publicclassJsonUtil{ privatestaticObjectMapperobjectMapper=null; /** *JSON初始化 */ static{ objectMapper=newObjectMapper(); //设置为中国上海时区 objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8")); //空值不序列化 objectMapper.setSerializationInclusion(Include.NON_NULL); //反序列化时,属性不存在的兼容处理 objectMapper.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); //序列化时,日期的统一格式 objectMapper.setDateFormat(newSimpleDateFormat("yyyy-MM-ddHH:mm:ss")); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); } /** *把对象转换成为Json字符串 * *@paramobj *@return */ publicstaticStringconvertObjectToJson(Objectobj){ if(obj==null){ //thrownewIllegalArgumentException("对象参数不能为空。"); returnnull; } try{ returnobjectMapper.writeValueAsString(obj); }catch(IOExceptione){ e.printStackTrace(); } returnnull; } /** *把json字符串转成Object对象 *@paramjsonString *@returnT */ publicstaticTparseJsonToObject(StringjsonString,Class valueType){ if(jsonString==null||"".equals((jsonString))){ returnnull; } try{ returnobjectMapper.readValue(jsonString,valueType); }catch(Exceptione){ e.printStackTrace(); } returnnull; } /** *把json字符串转成List对象 *@paramjsonString *@returnList */ @SuppressWarnings("unchecked") publicstatic List parseJsonToList(StringjsonString,Class valueType){ if(jsonString==null||"".equals((jsonString))){ returnnull; } List result=newArrayList (); try{ List >list=objectMapper.readValue(jsonString,List.class); for(LinkedHashMap
总结:net.sf.json.JSONObject这个属于json-lib这个老牌的系列,依赖的包超级多,commons的lang、logging、beanutils、collections等组件都有。
而org.json则相对来说依赖的包少一些,速度和性能方面没有怎么进行测试。
以上这篇基于JSON和java对象的互转方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。