java進階(二) java對象和json字符串的互轉

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




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章