package com.slb.webservice.servlet; |
import java.io.IOException; |
import java.util.ArrayList; |
import java.util.HashMap; |
import java.util.List; |
import java.util.Map; |
import org.apache.commons.lang3.StringUtils; |
import org.apache.log4j.Logger; |
import org.codehaus.jackson.JsonFactory; |
import org.codehaus.jackson.JsonGenerationException; |
import org.codehaus.jackson.JsonParseException; |
import org.codehaus.jackson.JsonParser; |
import org.codehaus.jackson.JsonToken; |
import org.codehaus.jackson.map.JsonMappingException; |
import org.codehaus.jackson.map.ObjectMapper; |
/** |
* json dto转换工具类 |
* @author LIHAO |
* 2014/05/07 |
*/ |
public class JSONUtils { |
static class LazyLoad { |
static JSONUtils instance = new JSONUtils(); |
} |
public static JSONUtils getInstance() { |
return LazyLoad.instance; |
} |
private static ObjectMapper objectMapper = new ObjectMapper(); |
private static Logger _logger = Logger.getLogger(JSONUtils. class ); |
/** |
* dto 转 json |
* @param obj dto 需转化对象 |
* @return json 字符串 |
* @throws IOException |
* @throws JsonMappingException |
* @throws JsonGenerationException |
* @throws Exception |
*/ |
public String dtoToJson(Object obj) throws JsonGenerationException, JsonMappingException, IOException { |
_logger.debug( "objToJson convert start..." ); |
String json = objectMapper.writeValueAsString(obj); |
_logger.debug( "objToJson convert end" ); |
return json; |
} |
/** |
* json 转 dto |
* @param cl 类 |
* @param json json字符串 |
* @return Object |
* @throws IOException |
* @throws JsonMappingException |
* @throws JsonParseException |
*/ |
public Object jsonToDto(Class<?> cl, String json) throws JsonParseException, JsonMappingException, IOException { |
_logger.debug( "jsonToDto convert start..." ); |
Object obj = objectMapper.readValue(json, cl); |
_logger.debug( "jsonToDto convert end" ); |
return obj; |
} |
/** |
* json 转 list dto |
* @param cl 类 |
* @param json json字符串 |
* @return Object的List |
* @throws IOException |
* @throws JsonParseException |
*/ |
public List<Object> jsonToListDto(Class<?> cl, String json) throws JsonParseException, IOException { |
if (StringUtils.isNotBlank(json)) { |
List<Object> list = new ArrayList<Object>(); |
_logger.debug( "jsonToListDto convert start..." ); |
JsonFactory f = new JsonFactory(); |
JsonParser jp = f.createJsonParser(json); |
jp.nextToken(); |
while (jp.nextToken() == JsonToken.START_OBJECT) { |
Object obj = objectMapper.readValue(jp, cl); |
list.add(obj); |
} |
_logger.debug( "jsonToListDto convert end" ); |
return list; |
} |
return null ; |
} |
/** |
* list json 转 dto |
* @param cl 类 |
* @param json list json字符串, 即[]格式 |
* @return Object |
* @throws JsonParseException |
* @throws IOException |
*/ |
public Object listJsonToDto(Class<?> cl, String json) throws JsonParseException, IOException { |
if (StringUtils.isNotBlank(json)) { |
_logger.debug( "listJsonToDto convert start..." ); |
JsonFactory f = new JsonFactory(); |
JsonParser jp = f.createJsonParser(json); |
jp.nextToken(); |
Object obj = null ; |
while (jp.nextToken() == JsonToken.START_OBJECT) { |
obj = objectMapper.readValue(jp, cl); |
break ; |
} |
_logger.debug( "listJsonToDto convert end" ); |
return obj; |
} |
return null ; |
} |
/** |
* map 转 json |
* @param map map格式数据 |
* @return json字符串 |
* @throws IOException |
* @throws JsonMappingException |
* @throws JsonGenerationException |
*/ |
public String mapToJson(Map<String, List<?>> map) throws JsonGenerationException, JsonMappingException, IOException { |
Map<String, List<?>> pageMap = new HashMap<String, List<?>>(); |
_logger.debug( "mapToJson convert start..." ); |
if (map != null && !map.isEmpty()) { |
for (Map.Entry<String, List<?>> entry : map.entrySet()) { |
pageMap.put(entry.getKey(), entry.getValue()); |
} |
} |
_logger.debug( "mapToJson convert end" ); |
return objectMapper.writeValueAsString(pageMap); |
} |
} |
//源代码片段来自云代码http://yuncode.net |
|