ZCMUCZX 2014-08-26
packagecom.ces.zwww.utils;
importjava.io.Serializable;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Map;
importjava.util.Map.Entry;
importjava.util.Set;
importnet.sf.json.JSON;
importnet.sf.json.JSONArray;
importnet.sf.json.JSONObject;
importnet.sf.json.JSONSerializer;
importnet.sf.json.JsonConfig;
/**
*JSON公用方法
*.
*<p>描述:</p>
*<p>Company:上海中信信息发展股份有限公司</p>
*@authorboge(haibo.liu)
*@date2013-2-27上午11:12:37
*@version1.0.2013.
*/
@SuppressWarnings("unchecked")
publicclassJsonUtilimplementsSerializable{
privatestaticfinallongserialVersionUID=1L;
/**
*获取jsonStr中的属性值
*@paramjsonStr
*@paramkey
*@return
*/
publicstaticStringgetAttribute(StringjsonStr,Stringkey){
jsonStr=initJsonStr(jsonStr);
JsonConfigjsonConfig=null;
JSONArrayjsonArray=null;
jsonConfig=newJsonConfig();
jsonConfig.setArrayMode(JsonConfig.MODE_OBJECT_ARRAY);
jsonConfig.setRootClass(String.class);
jsonArray=JSONArray.fromObject(jsonStr,jsonConfig);
if(jsonArray!=null&&jsonArray.getJSONObject(0)!=null){
returnjsonArray.getJSONObject(0).getString(key);
}else{
returnnull;
}
}
/**
*根据json串得到它的属性值空值和null值被忽略
*@paramjsonStr
*@return
*/
publicstaticMapgetAttributesIngoreNull(StringjsonStr){
try{
Map[]maps=getAttributes(jsonStr,null,true);
if(maps!=null&&maps.length>0){
returnmaps[0];
}
}catch(Exceptione){
System.out.println("json串转化失败!"+jsonStr);
}
returnnull;
}
publicstaticMapgetAttributesIngoreNull(StringjsonStr,Mapmap){
Map[]maps=getAttributes(jsonStr,map,true);
if(maps!=null&&maps.length>0){
returnmaps[0];
}else{
returnnull;
}
}
/**
*根据json串得到它的属性值不忽略空值和null
*@paramjsonStr
*@return
*/
publicstaticMapgetAttributes(StringjsonStr){
Map[]maps=getAttributes(jsonStr,null,false);
if(maps!=null&&maps.length>0){
returnmaps[0];
}else{
returnnull;
}
}
publicstaticMapgetAttributes(StringjsonStr,Mapmap){
Map[]maps=getAttributes(jsonStr,map,false);
if(maps!=null&&maps.length>0){
returnmaps[0];
}else{
returnnull;
}
}
/**
*jsonStr对于jsonStr是list或array生成的
*返回数组或List列表
*@paramjsonStr
*@return
*/
publicstaticMap[]getAttributesToMaps(StringjsonStr){
returngetAttributes(jsonStr,null,false);
}
publicstaticMap[]getAttributesToMapsIngoreNull(StringjsonStr){
returngetAttributes(jsonStr,null,true);
}
publicstaticMap[]getAttributesToMaps(StringjsonStr,Mapmap){
returngetAttributes(jsonStr,map,false);
}
publicstaticMap[]getAttributesToMapsIngoreNull(StringjsonStr,Mapmap){
returngetAttributes(jsonStr,map,true);
}
/**
*根据json串得到它的属性值
*@paramjsonStr
*@parammap要取哪些值,及这些在返回的map中以什么key值存放
*key为json串的属性名称
*value为returnmap中的key值,如果value为空(null或""),则key值与json串中的属性名称相同
*@paramingoreNulltrue空值和null值被忽略false不忽略
*@return
*/
privatestaticMap[]getAttributes(StringjsonStr,Mapmap,booleaningoreNull){
Map[]rmap=null;
Iteratoriterator=null;
Entryentry=null;
Stringkey=null;
Stringvalue=null;
StringattValue=null;
JsonConfigjsonConfig=null;
JSONArrayjsonArray=null;
jsonStr=initJsonStr(jsonStr);
if(jsonStr!=null&&!jsonStr.trim().equals("")){
if(!jsonStr.trim().startsWith("[")){
jsonStr=newStringBuffer("[").append(jsonStr).append("]").toString();
}
jsonConfig=newJsonConfig();
jsonConfig.setArrayMode(JsonConfig.MODE_OBJECT_ARRAY);
jsonConfig.setRootClass(String.class);
jsonArray=JSONArray.fromObject(jsonStr,jsonConfig);
if(jsonArray==null||jsonArray.size()==0){
returnnull;
}
rmap=newHashMap[jsonArray.size()];
for(inti=0;i<jsonArray.size();i++){
rmap[i]=newHashMap();
if(map!=null&&map.size()>0){
iterator=map.entrySet().iterator();
while(iterator.hasNext()){
entry=(Entry)iterator.next();
key=(String)entry.getKey();
value=(String)entry.getValue();
attValue=jsonArray.getJSONObject(i).getString(key);
if(ingoreNull){
if(attValue!=null&&!attValue.trim().equals("")&&!attValue.equals("null")&&!attValue.equals("undefined")){
rmap[i].put(value==null||value.trim().equals("")?key:value,attValue.trim());
}
}else{
rmap[i].put(value==null||value.trim().equals("")?key:value,attValue==null?null:attValue.trim());
}
}
}else{
iterator=jsonArray.getJSONObject(i).keySet().iterator();
while(iterator.hasNext()){
key=(String)iterator.next();
attValue=jsonArray.getJSONObject(i).getString(key);
if(ingoreNull){
if(attValue!=null&&!attValue.trim().equals("")&&!attValue.equals("null")&&!attValue.equals("undefined")){
rmap[i].put(key,attValue.trim());
}
}else{
rmap[i].put(key,attValue==null?null:attValue.trim());
}
}
}
}
}
returnrmap;
}
/**
*将String数组转成json串
*@paramarray
*@return
*/
publicstaticStringstringArrayToJsonStr(String[]array){
if(array==null||array.length==0){
returnnull;
}
JSONArrayjsonArray=newJSONArray();
for(inti=0;i<array.length;i++){
if(array[i].startsWith("'")&&array[i].endsWith("'")){
array[i]="\'''"+array[i].substring(1,array[i].length()-1)+"\'''";
}elseif(array[i].startsWith("\"")&&array[i].endsWith("\"")){
array[i]="\''\""+array[i].substring(1,array[i].length()-1)+"\"\''";
}
jsonArray.add(array[i]);
}
returnjsonArray.toString();
}
/**
*将json串转成String数组
*@paramjsonStr
*@return
*/
publicstaticString[]jsonStrToStringArray(StringjsonStr){
if(jsonStr==null||jsonStr.trim().equals("")){
returnnull;
}
JsonConfigjsonConfig=newJsonConfig();
jsonConfig.setArrayMode(JsonConfig.MODE_OBJECT_ARRAY);
jsonConfig.setRootClass(String.class);
JSONjson=JSONSerializer.toJSON(jsonStr,jsonConfig);
return(String[])JSONSerializer.toJava(json,jsonConfig);
}
/**
*json串转成对象
*@paramjsonStr
*@paramc
*@return
*/
publicstaticObjectjsonStrToObject(StringjsonStr,Classc){
if(jsonStr==null||jsonStr.trim().equals("")){
returnnull;
}
Listlist=jsonStrToList(jsonStr,c);
if(list==null||list.size()==0){
returnnull;
}else{
returnlist.get(0);
}
}
/**
*json串转成List列表
*@paramjsonStr
*@paramc
*@return
*/
publicstaticListjsonStrToList(StringjsonStr,Classc){
if(jsonStr==null||jsonStr.trim().equals("")){
returnnull;
}
jsonStr=initJsonStr(jsonStr);
JsonConfigjsonConfig=newJsonConfig();
jsonConfig.setArrayMode(JsonConfig.MODE_LIST);
jsonConfig.setRootClass(c);
JSONjson=JSONSerializer.toJSON(jsonStr,jsonConfig);
return(List)JSONSerializer.toJava(json,jsonConfig);
}
/////排除json中字段解析成实体
/**
*json串转成List列表
*@paramjsonStr
*@paramc
*@return
*/
publicstaticListjsonStrToListExcute(StringjsonStr,Classc){
if(jsonStr==null||jsonStr.trim().equals("")){
returnnull;
}
jsonStr=initJsonStr(jsonStr);
JsonConfigjsonConfig=newJsonConfig();
jsonConfig.setArrayMode(JsonConfig.MODE_LIST);
jsonConfig.setExcludes(newString[]{"id"});
jsonConfig.setRootClass(c);
JSONjson=JSONSerializer.toJSON(jsonStr,jsonConfig);
return(List)JSONSerializer.toJava(json,jsonConfig);
}
/**
*json串转成Object数组
*@paramjsonStr
*@paramc
*/
publicstaticObject[]jsonStrToArray(StringjsonStr,Classc){
if(jsonStr==null||jsonStr.trim().equals("")){
returnnull;
}
jsonStr=initJsonStr(jsonStr);
JsonConfigjsonConfig=newJsonConfig();
jsonConfig.setArrayMode(JsonConfig.MODE_OBJECT_ARRAY);
jsonConfig.setRootClass(c);
JSONjson=JSONSerializer.toJSON(jsonStr,jsonConfig);
return(Object[])JSONSerializer.toJava(json,jsonConfig);
}
/**
*对象转换成jsonStr
*@paramobject
*@return
*/
publicstaticStringobjectToJsonStr(Objectobject){
if(object==null
||(objectinstanceofList&&((List)object).size()==0)
||(objectinstanceofMap&&((Map)object).size()==0)
||(objectinstanceofSet&&((Set)object).size()==0)
){
returnnull;
}
JSONArrayjsonArray=JSONArray.fromObject(object);
returnjsonArray.toString();
}
publicstaticJSONArrayjsonStrToJSONArray(StringjsonStr){
if(jsonStr==null||jsonStr.trim().equals("")){
returnnull;
}
jsonStr=initJsonStr(jsonStr);
JsonConfigjsonConfig=newJsonConfig();
jsonConfig.setArrayMode(JsonConfig.MODE_LIST);
jsonConfig.setRootClass(String.class);
returnJSONArray.fromObject(jsonStr,jsonConfig);
}
publicstaticStringaddAttribute(StringjsonStr,StringattributeKey,ObjectattributeValue){
JSONArrayjsonArray=jsonStrToJSONArray(jsonStr);
JSONObjectjo=null;
if(jsonArray==null||jsonArray.size()==0){
jo=newJSONObject();
jo.put(attributeKey,attributeValue);
returnnewStringBuffer("[").append(jo.toString()).append("]").toString();
}else{
for(inti=0;i<jsonArray.size();i++){
jo=(JSONObject)jsonArray.getJSONObject(i);
jo.put(attributeKey,attributeValue);
jsonArray.set(i,jo);
}
returnjsonArray.toString();
}
}
publicstaticStringremoveAttribute(StringjsonStr,StringattributeKey){
JSONArrayjsonArray=jsonStrToJSONArray(jsonStr);
JSONObjectjo=null;
if(jsonArray==null||jsonArray.size()==0){
returnnull;
}else{
for(inti=0;i<jsonArray.size();i++){
jo=(JSONObject)jsonArray.getJSONObject(i);
jo.remove(attributeKey);
jsonArray.set(i,jo);
}
returnjsonArray.toString();
}
}
publicstaticStringreplaceAttribute(StringjsonStr,StringattributeKey,ObjectattributeValue){
JSONArrayjsonArray=jsonStrToJSONArray(jsonStr);
JSONObjectjo=null;
if(jsonArray==null||jsonArray.size()==0){
returnnull;
}else{
for(inti=0;i<jsonArray.size();i++){
jo=(JSONObject)jsonArray.getJSONObject(i);
if(jo.containsKey(attributeKey)){
jo.remove(attributeKey);
jo.put(attributeKey,attributeValue);
}
jsonArray.set(i,jo);
}
returnjsonArray.toString();
}
}
privatestaticStringinitJsonStr(StringjsonStr){
if(jsonStr==null||jsonStr.trim().equals("")){
returnnull;
}
//jsonStr=jsonStr.replaceAll("\r\n","\\\\r\\\\n");//.replaceAll("\r","\\r").replaceAll("\n","\\n");
jsonStr=jsonStr.replaceAll("\r","\\\\r").replaceAll("\n","\\\\n");//.replaceAll("\r","\\r").replaceAll("\n","\\n");
returnjsonStr;
}
publicstaticMap<String,Object>parseJSON2Map(StringjsonStr){
Map<String,Object>map=newHashMap<String,Object>();
//最外层解析
JSONObjectjson=JSONObject.fromObject(jsonStr);
for(Objectk:json.keySet()){
Objectv=json.get(k);
//如果内层还是数组的话,继续解析
if(vinstanceofJSONArray){
List<Map<String,Object>>list=newArrayList<Map<String,Object>>();
Iterator<JSONObject>it=((JSONArray)v).iterator();
while(it.hasNext()){
JSONObjectjson2=it.next();
list.add(parseJSON2Map(json2.toString()));
}
map.put(k.toString(),list);
}else{
map.put(k.toString(),v);
}
}
returnmap;
}
}