一.Jackson框架,轻松实现java对象和json字符串的互转
为什么使用jackson框架:
1.Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象
2.相比json-lib框架,Jackson所依赖的jar包较少
3.简单易用并且性能也要相对高些
4.Jackson社区相对比较活跃,更新速度也比较快
二.具体使用
转json字符串时分为两种情况:
1.不忽略java对象中值为null的字段,都直接转成字符串
2.忽略java对象中值为null的字段
public class JsonUtil {
private static final ObjectMapper mapper = new ObjectMapper();
private static final ObjectMapper mapperExcludeNull = new ObjectMapper();
static {
/*********设置有属性不能映射成PO时不报错,即出现多余的数据,照样能够映射成功 ********/
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
/*********设置有属性不能映射成PO时不报错,即出现多余的数据,照样能够映射成功 ********/
mapperExcludeNull.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
/**
* Include.Include.ALWAYS 默认
* Include.NON_DEFAULT 属性为默认值不序列化
* Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化
* Include.NON_NULL 属性为NULL 不序列化
*/
mapperExcludeNull.setSerializationInclusion(Include.NON_NULL);
}
/**
* 将对象转成json字符串
* @date 2016年10月13日
*/
public static String toJson(Object obj) {
return toJson(obj, mapper);
}
/**
* 将对象转成json字符串
* @date 2016年10月13日
*/
public static String toJsonIgnoreNull(Object obj) {
return toJson(obj, mapperExcludeNull);
}
private static String toJson(Object obj, ObjectMapper objectMapper) {
if(obj == null)
return null;
String str = null;
try {
str = objectMapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return str;
}
/**
* 将json数据转成Map集合类
* @date 2016年10月13日
*/
@SuppressWarnings("unchecked")
public static Map<String, Object> toMap(String json) {
return (Map<String, Object>)fromJson(json, Map.class);
}
/**
* 将json数据转成List集合类
* @date 2016年10月13日
*/
@SuppressWarnings("unchecked")
public static List<Map<String, Object>> toList(String json) {
return (List<Map<String, Object>>)fromJson(json, List.class);
}
/**
* 将json字符串映射到对象中,clazz中的成员变量名要和json数据中的字段一一对应
* @date 2016年10月13日
*/
@SuppressWarnings("unchecked")
public static <T> T fromJson(String json, Class<T> clazz) {
if ((json == null) || ("".equals(json))) {
return null;
}
Object object = null;
try {
object = mapper.readValue(json, clazz);
} catch (Exception e) {
e.printStackTrace();
}
return (T) object;
}
/**
* 将json字符串映射到对象中,clazz中的成员变量名要和json数据中的字段一一对应
* @date 2016年10月13日
*/
@SuppressWarnings("unchecked")
public static <T> T fromJson(InputStream is, Class<T> clazz) {
if (is == null) {
return null;
}
Object object = null;
try {
object = mapper.readValue(is, clazz);
} catch (Exception e) {
e.printStackTrace();
}
return (T) object;
}
/**
* 通过url获取json字符串数据
* @date 2016年10月13日
*/
public static String getJsonStrFromUrl(String jsonUrl) {
StringBuffer sb = new StringBuffer();
BufferedReader br = null;
String line = null;
try {
URL url = new URL(jsonUrl);
HttpURLConnection huc = (HttpURLConnection) url.openConnection();
br = new BufferedReader(new InputStreamReader(huc.getInputStream()));
while((line = br.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(br != null) br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
/**
* 获得node节点中jsonField字段的值,返回的默认值为""
* @date 2016年8月4日
*/
public static String getString(JsonNode node, String jsonField) {
String tmp = "";
if(node.has(jsonField)) {
tmp = node.get(jsonField).asText();
}
return tmp;
}
/**
* 获得node节点中jsonField字段的值,返回的默认值为defaults
* @date 2016年8月4日
*/
public static String getString(JsonNode node, String jsonField, String defaults) {
String tmp = defaults;
if(node.has(jsonField)) {
tmp = node.get(jsonField).asText();
}
return tmp;
}
/**
* 获得node节点中jsonField字段的值,返回的默认值为0
* @date 2016年8月4日
*/
public static int getInt(JsonNode node, String jsonField) {
int tmp = 0;
if(node.has(jsonField)) {
tmp = node.get(jsonField).asInt();
}
return tmp;
}
/**
* 获得node节点中jsonField字段的值,返回的默认值为defaults
* @date 2016年8月4日
*/
public static int getInt(JsonNode node, String jsonField, int defaults) {
int tmp = defaults;
if(node.has(jsonField)) {
tmp = node.get(jsonField).asInt();
}
return tmp;
}
/**
* 获得node节点中jsonField字段的值,返回的默认值为0.0
* @date 2016年8月4日
*/
public static double getDouble(JsonNode node, String jsonField) {
double tmp = 0;
if(node.has(jsonField)) {
tmp = node.get(jsonField).asDouble();
}
return tmp;
}
/**
* 获得node节点中jsonField字段的值,返回的默认值为defaults
* @date 2016年8月4日
*/
public static double getDouble(JsonNode node, String jsonField, double defaults) {
double tmp = defaults;
if(node.has(jsonField)) {
tmp = node.get(jsonField).asDouble();
}
return tmp;
}
/**
* 获得node节点中jsonField字段的值,返回的默认值为false
* @date 2016年8月4日
*/
public static boolean getBoolean(JsonNode node, String jsonField) {
boolean tmp = false;
if(node.has(jsonField)) {
tmp = node.get(jsonField).asBoolean();
}
return tmp;
}
/**
* 获得node节点中jsonField字段的值,返回的默认值为defaults
* @date 2016年8月4日
*/
public static boolean getBoolean(JsonNode node, String jsonField, boolean defaults) {
boolean tmp = defaults;
if(node.has(jsonField)) {
tmp = node.get(jsonField).asBoolean();
}
return tmp;
}
}