一.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;
}
}