package net.csdn.blog.chaijunkun.util;
import java.io.IOException;
import java.io.StringWriter;
import org.apache.log4j.Logger;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import org.codehaus.jackson.map.ser.CustomSerializerFactory;
public class JSONUtil {
private static Logger logger= Logger.getLogger(JSONUtil.class);
private static ObjectMapper objectMapper;
/**
* 懒惰单例模式得到ObjectMapper实例
* 此对象为Jackson的核心
*/
private static ObjectMapper getMapper(){
if (objectMapper== null){
objectMapper= new ObjectMapper();
//当找不到对应的序列化器时 忽略此字段
objectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
//使Jackson JSON支持Unicode编码非ASCII字符
CustomSerializerFactory serializerFactory= new CustomSerializerFactory();
serializerFactory.addSpecificMapping(String.class, new StringUnicodeSerializer());
objectMapper.setSerializerFactory(serializerFactory);
//支持结束
}
return objectMapper;
}
/**
* 创建JSON处理器的静态方法
* @param content JSON字符串
* @return
*/
private static JsonParser getParser(String content){
try{
return getMapper().getJsonFactory().createJsonParser(content);
}catch (IOException ioe){
return null;
}
}
/**
* 创建JSON生成器的静态方法, 使用标准输出
* @return
*/
private static JsonGenerator getGenerator(StringWriter sw){
try{
return getMapper().getJsonFactory().createJsonGenerator(sw);
}catch (IOException e) {
return null;
}
}
/**
* JSON对象序列化
*/
public static String toJSON(Object obj){
StringWriter sw= new StringWriter();
JsonGenerator jsonGen= getGenerator(sw);
if (jsonGen== null){
try {
sw.close();
} catch (IOException e) {
}
return null;
}
try {
//由于在getGenerator方法中指定了OutputStream为sw
//因此调用writeObject会将数据输出到sw
jsonGen.writeObject(obj);
//由于采用流式输出 在输出完毕后务必清空缓冲区并关闭输出流
jsonGen.flush();
jsonGen.close();
return sw.toString();
} catch (JsonGenerationException jge) {
logger.error("JSON生成错误" + jge.getMessage());
} catch (IOException ioe) {
logger.error("JSON输入输出错误" + ioe.getMessage());
}
return null;
}
/**
* JSON对象反序列化
*/
public static <T> T fromJSON(String json, Class<T> clazz) {
try {
JsonParser jp= getParser(json);
return jp.readValueAs(clazz);
} catch (JsonParseException jpe){
logger.error(String.format("反序列化失败, 错误原因:%s", jpe.getMessage()));
} catch (JsonMappingException jme){
logger.error(String.format("反序列化失败, 错误原因:%s", jme.getMessage()));
} catch (IOException ioe){
logger.error(String.format("反序列化失败, 错误原因:%s", ioe.getMessage()));
}
return null;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
JSONUtil.zip (22个子文件)
bin
log4j.properties 330B
net
csdn
blog
chaijunkun
test
JSONTest.class 3KB
json
DemoObj.class 2KB
util
DateTimeDeserializer.class 2KB
DateDeserializer.class 2KB
DateSerializer.class 1KB
JSONUtil.class 4KB
StringUnicodeSerializer.class 3KB
DateTimeSerializer.class 1KB
.project 384B
resource
log4j.properties 330B
.classpath 453B
java
net
csdn
blog
chaijunkun
test
JSONTest.java 2KB
json
DemoObj.java 1KB
util
DateTimeSerializer.java 702B
DateSerializer.java 689B
StringUnicodeSerializer.java 2KB
DateTimeDeserializer.java 910B
JSONUtil.java 3KB
DateDeserializer.java 897B
lib
jackson-all-1.9.3.jar 1.06MB
log4j-1.2.17.jar 478KB
共 22 条
- 1
Jack_Chai
- 粉丝: 561
- 资源: 26
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
前往页