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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值