`

json与Ojbect互相转换

    博客分类:
  • JSON
 
阅读更多

json与Ojbect互相转换,用到的第三方库为:jackson-mapper-asl-*.jar

import java.io.IOException;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;

public class JsonUtil {

    /**
     * 
     * 此方法描述的是:根据key取得相应的值
     * 
     * @param map
     *            欲取值的map
     * @param key
     *            key
     * @return String
     * @throws IOException
     * @throws JsonMappingException
     * @throws JsonGenerationException
     */
    public static String getString(Map<String, Object> map, String key) throws JsonGenerationException,
            JsonMappingException, IOException {
        try {
            return (String) map.get(key);
        }
        catch (Exception e) {
            return JsonUtil.toString(map.get(key));
        }
    }

    /**
     * 
     * 此方法描述的是:取得list
     * 
     * @param map
     *            欲取值的map
     * @param key
     *            key
     * @return List<Map<String, Object>>
     * @throws IOException
     * @throws JsonMappingException
     * @throws JsonParseException
     */
    @SuppressWarnings("unchecked")
    public static List<Map<String, Object>> getList(Map<String, Object> map, String key) throws JsonParseException,
            JsonMappingException, IOException {
        if (null == map) {
            return null;
        }
        try {
            return (List<Map<String, Object>>) map.get(key);
        }
        catch (Exception e) {
            return JsonUtil.toList(map.get(key));
        }

    }

    /**
     * 
     * 此方法描述的是:取得list
     * 
     * @param map
     *            欲取值的map
     * @param key
     *            key
     * @return Map<String, Object>
     * @throws IOException
     * @throws JsonMappingException
     * @throws JsonParseException
     */
    @SuppressWarnings("unchecked")
    public static Map<String, Object> getMap(Map<String, Object> map, String key) throws JsonParseException,
            JsonMappingException, IOException {
        try {
            return (Map<String, Object>) map.get(key);
        }
        catch (Exception e) {
            return JsonUtil.toBean(map.get(key), Map.class);
        }

    }

    /**
     * 
     * 此方法描述的是:根据key取值int
     * 
     * @param map
     *            欲取值的map
     * @param key
     *            key
     * @param defaultValue
     *            默认值
     * @return int
     */
    public static int getInt(Map<String, Object> map, String key, int defaultValue) {
        try {
            return (Integer) map.get(key);
        }
        catch (Exception e) {
            try {
                return Integer.parseInt(JsonUtil.toString(map.get(key)));
            }
            catch (Exception e2) {
                return defaultValue;
            }
        }
    }

    /**
     * 
     * 此方法描述的是:根据key取BigDecial
     * 
     * @param map
     *            欲取值的map
     * @param key
     *            key
     * @param defaultValue
     *            默认值
     * @return BigDecimal
     */
    public static BigDecimal getBigDecimal(Map<String, Object> map, String key, BigDecimal defaultValue) {
        return new BigDecimal(getDouble(map, key, defaultValue.doubleValue()));
    }

    /**
     * 
     * 此方法描述的是:根据key取BigDecial
     * 
     * @param map
     *            欲取值的map
     * @param key
     *            key
     * @return BigDecimal
     */
    public static BigDecimal getBigDecimal(Map<String, Object> map, String key) {
        return new BigDecimal(getDouble(map, key));
    }

    /**
     * 
     * 此方法描述的是:根据key取值int
     * 
     * @param map
     *            欲取值的map
     * @param key
     *            key
     * @return int
     */
    public static int getInt(Map<String, Object> map, String key) {
        return JsonUtil.getInt(map, key, 0);
    }

    /**
     * 
     * 此方法描述的是:根据key取得boolean值
     * 
     * @param map
     *            欲取值的map
     * @param key
     *            key
     * @param defaultValue
     *            默认值
     * @return boolean
     */
    public static boolean getBoolean(Map<String, Object> map, String key, boolean defaultValue) {
        try {
            return (Boolean) map.get(key);
        }
        catch (Exception e) {
            try {
                return Boolean.parseBoolean(JsonUtil.toString(map.get(key)));
            }
            catch (Exception e2) {
                return defaultValue;
            }
        }
    }

    /**
     * 
     * 此方法描述的是:根据key取得boolean值,默认为false
     * 
     * @param map
     *            欲取值的map
     * @param key
     *            key
     * @return boolean
     */
    public static boolean getBoolean(Map<String, Object> map, String key) {
        return getBoolean(map, key, false);
    }

    /**
     * 
     * 此方法描述的是:向obj数组中加新元素,
     * 
     * @param list
     *            list
     * @param obj
     *            增加的元素
     * @throws IOException
     * @throws JsonMappingException
     * @throws JsonParseException
     */
    @SuppressWarnings("unchecked")
    public static void add(List<HashMap<String, Object>> list, Object obj) throws JsonParseException,
            JsonMappingException, IOException {
        list.add(JsonUtil.toBean(list, HashMap.class));
    }

    /**
     * 
     * 此方法描述的是:根据key取得double值
     * 
     * @param map
     *            欲取值的map
     * @param key
     *            key
     * @param defaultValue
     *            默认值
     * @return double
     */
    public static double getDouble(Map<String, Object> map, String key, double defaultValue) {
        try {
            return (Double) map.get(key);
        }
        catch (Exception e) {
            try {
                return Double.parseDouble(JsonUtil.toString(map.get(key)));
            }
            catch (Exception e2) {
                return defaultValue;
            }
        }

    }

    /**
     * 
     * 此方法描述的是:根据key取得double值
     * 
     * @param map
     *            欲取值的map
     * @param key
     *            key
     * @return double
     */
    public static double getDouble(Map<String, Object> map, String key) {
        return getDouble(map, key, 0D);
    }

    /**
     * 
     * 此方法描述的是:根据key取得double值
     * 
     * @param map
     *            欲取值的map
     * @param key
     *            key
     * @param defaultValue
     *            默认值
     * @return long
     */
    public static long getLong(Map<String, Object> map, String key, long defaultValue) {
        try {
            return (Long) map.get(key);
        }
        catch (Exception e) {
            try {
                return Long.parseLong(JsonUtil.toString(map.get(key)));
            }
            catch (Exception e2) {
                return defaultValue;
            }
        }
    }

    /**
     * 
     * 此方法描述的是:根据key取得double值
     * 
     * @param map
     *            欲取值的map
     * @param key
     *            key
     * @return long
     */
    public static long getLong(Map<String, Object> map, String key) {
        return getLong(map, key, 0L);
    }

    /**
     * 
     * 此方法描述的是:将Object转化为Json格式字符串
     * 
     * @param obj
     *            欲转换的对象
     * @return String
     * @throws IOException
     * @throws JsonMappingException
     * @throws JsonGenerationException
     */
    public static String toString(Object obj) throws JsonGenerationException, JsonMappingException, IOException {
        if (obj instanceof String) {
            return (String) obj;
        }
        else if (null == obj) {
            return null;
        }
        return JsonFormatter.toJsonString(obj);
    }

    /**
     * 
     * 此方法描述的是:将Object转化为Json格式字符串
     * 
     * @param obj
     *            欲转换的对象
     * @param dateFormat
     *            日期format
     * @return String
     * @throws IOException
     * @throws JsonMappingException
     * @throws JsonGenerationException
     */
    public static String toString(Object obj, DateFormat dateFormat) throws JsonGenerationException,
            JsonMappingException, IOException {
        if (obj instanceof String) {
            return (String) obj;
        }
        else if (null == obj) {
            return null;
        }
        JsonFormatter.setDateFormat(dateFormat);
        return JsonFormatter.toJsonString(obj);
    }

    /**
     * 
     * 此方法描述的是:将传入的对象转换成指定的对象
     * 
     * @param <T>
     *            模板类
     * @param cls
     *            与转化的类
     * @param obj
     *            被转换的对象
     * @return T
     * @throws IOException
     * @throws JsonMappingException
     * @throws JsonParseException
     */
    public static <T> T toBean(Object obj, Class<T> cls) throws JsonParseException, JsonMappingException, IOException {
        if (null == obj) {
            return null;
        }
        return JsonFormatter.toObject(JsonUtil.toString(obj), cls);
    }

    /**
     * 
     * 此方法描述的是:字符串转换为List<map>
     * 
     * @param obj
     *            与转换的对象
     * @return List<Map<String, Object>>
     * @throws IOException
     * @throws JsonMappingException
     * @throws JsonParseException
     */
    @SuppressWarnings("unchecked")
    public static List<Map<String, Object>> toList(Object obj) throws JsonParseException, JsonMappingException,
            IOException {
        List<Map<String, Object>> lists = new LinkedList<Map<String, Object>>();
        List<Object> list = JsonUtil.toBean(obj, List.class);
        if (null != list) {
            for (Object object : list) {
                Map<String, Object> map = JsonUtil.toBean(object, HashMap.class);
                if (null != map) {
                    lists.add(map);
                }
            }
        }
        return lists;
    }

    /**
     * 
     * 此方法描述的是:字符串转换为List
     * 
     * @param <T>
     *            模板类
     * @param cls
     *            与转化的类
     * @param obj
     *            被转换的对象
     * @return T
     * @throws IOException
     * @throws JsonMappingException
     * @throws JsonParseException
     * 
     */
    @SuppressWarnings("unchecked")
    public static <T> List<T> toList(Object obj, Class<T> cls) throws JsonParseException, JsonMappingException,
            IOException {
        List<T> lists = new LinkedList<T>();
        List<Object> list = JsonUtil.toBean(obj, List.class);
        if (null != list) {
            for (Object object : list) {
                T t = JsonUtil.toBean(object, cls);
                if (null != t) {
                    lists.add(t);
                }
            }
        }
        return lists;
    }

}

 

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.net.URL;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import org.codehaus.jackson.map.annotate.JsonSerialize;

@SuppressWarnings({ "unchecked", "rawtypes" })
public class JsonFormatter {

    private static final ThreadLocal<ObjectMapper> INCLUDE_NULL_MAPPER     = new ThreadLocal();

    private static final ThreadLocal<ObjectMapper> NOT_INCLUDE_NULL_MAPPER = new ThreadLocal();

    private static ObjectMapper getMapper(boolean serializeNull) {
        ThreadLocal tl = serializeNull ? INCLUDE_NULL_MAPPER : NOT_INCLUDE_NULL_MAPPER;
        if (null == tl.get()) {
            ObjectMapper mapper = new ObjectMapper();
            mapper.disable(new DeserializationConfig.Feature[] { DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES });

            mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
            if (!serializeNull) {
                mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
                mapper.disable(new SerializationConfig.Feature[] { SerializationConfig.Feature.WRITE_NULL_MAP_VALUES });
            }

            tl.set(mapper);
        }

        return (ObjectMapper) tl.get();
    }

    public static String toJsonString(Object obj) throws JsonGenerationException, JsonMappingException, IOException {
        return toJsonString(obj, true);
    }

    public static String toJsonAsString(Object obj) throws JsonGenerationException, JsonMappingException, IOException {
        return toJsonAsString(obj, true);
    }

    public static byte[] toJsonAsBytes(Object obj) throws JsonGenerationException, JsonMappingException, IOException {
        return toJsonAsBytes(obj, true);
    }

    public static void toJsonToFile(File file, Object obj) throws JsonGenerationException, JsonMappingException,
            IOException {
        toJsonToFile(file, obj, true);
    }

    public static void toJsonToOutputStream(OutputStream out, Object obj) throws JsonGenerationException,
            JsonMappingException, IOException {
        toJsonToOutputStream(out, obj, true);
    }

    public static void toJsonToWriter(Writer writer, Object obj) throws JsonGenerationException, JsonMappingException,
            IOException {
        toJsonToWriter(writer, obj, true);
    }

    public static <T> T toObject(String json, Class<T> clazz) throws JsonParseException, JsonMappingException,
            IOException {
        return toObject(json, clazz, true);
    }

    public static <T> T toObject(byte[] src, Class<T> clazz) throws JsonParseException, JsonMappingException,
            IOException {
        return toObject(src, clazz, true);
    }

    public static <T> T toObject(File file, Class<T> clazz) throws JsonParseException, JsonMappingException,
            IOException {
        return toObject(file, clazz, true);
    }

    public static <T> T toObject(InputStream input, Class<T> clazz) throws JsonParseException, JsonMappingException,
            IOException {
        return toObject(input, clazz, true);
    }

    public static <T> T toObject(Reader reader, Class<T> clazz) throws JsonParseException, JsonMappingException,
            IOException {
        return toObject(reader, clazz, true);
    }

    public static <T> T toObject(URL url, Class<T> clazz) throws JsonParseException, JsonMappingException, IOException {
        return toObject(url, clazz, true);
    }

    public static String toJsonString(Object obj, boolean serializeNull) throws JsonGenerationException,
            JsonMappingException, IOException {
        return getMapper(serializeNull).writeValueAsString(obj);
    }

    public static String toJsonAsString(Object obj, boolean serializeNull) throws JsonGenerationException,
            JsonMappingException, IOException {
        return getMapper(serializeNull).writeValueAsString(obj);
    }

    public static byte[] toJsonAsBytes(Object obj, boolean serializeNull) throws JsonGenerationException,
            JsonMappingException, IOException {
        return getMapper(serializeNull).writeValueAsBytes(obj);
    }

    public static void toJsonToFile(File file, Object obj, boolean serializeNull) throws JsonGenerationException,
            JsonMappingException, IOException {
        getMapper(serializeNull).writeValue(file, obj);
    }

    public static void toJsonToOutputStream(OutputStream out, Object obj, boolean serializeNull)
            throws JsonGenerationException, JsonMappingException, IOException {
        getMapper(serializeNull).writeValue(out, obj);
    }

    public static void toJsonToWriter(Writer writer, Object obj, boolean serializeNull) throws JsonGenerationException,
            JsonMappingException, IOException {
        getMapper(serializeNull).writeValue(writer, obj);
    }

    public static <T> T toObject(String json, Class<T> clazz, boolean serializeNull) throws JsonParseException,
            JsonMappingException, IOException {
        return getMapper(serializeNull).readValue(json, clazz);
    }

    public static <T> T toObject(byte[] src, Class<T> clazz, boolean serializeNull) throws JsonParseException,
            JsonMappingException, IOException {
        return getMapper(serializeNull).readValue(src, clazz);
    }

    public static <T> T toObject(File file, Class<T> clazz, boolean serializeNull) throws JsonParseException,
            JsonMappingException, IOException {
        return getMapper(serializeNull).readValue(file, clazz);
    }

    public static <T> T toObject(InputStream input, Class<T> clazz, boolean serializeNull) throws JsonParseException,
            JsonMappingException, IOException {
        return getMapper(serializeNull).readValue(input, clazz);
    }

    public static <T> T toObject(Reader reader, Class<T> clazz, boolean serializeNull) throws JsonParseException,
            JsonMappingException, IOException {
        return getMapper(serializeNull).readValue(reader, clazz);
    }

    public static <T> T toObject(URL url, Class<T> clazz, boolean serializeNull) throws JsonParseException,
            JsonMappingException, IOException {
        return getMapper(serializeNull).readValue(url, clazz);
    }

    public static void setDateFormat(DateFormat dateFormat) {
        getMapper(true).setDateFormat(dateFormat);
        getMapper(false).setDateFormat(dateFormat);
    }
}

 

分享到:
评论

相关推荐

    MacOS Ojbect-c编程入门教程

    MacOS Object-C编程入门教程是一套为初学者设计的学习资源,涵盖了从操作系统基础到编程语言核心概念的广泛知识。在iPhone开发中,Object-C作为主要的编程语言,掌握其基本语法和特性至关重要。...

    导出文字、图片到excel

    vs2005项目,添加com组件的引用: Microsoft Excel 11.0 Ojbect Library //Microsoft Office 10.0 Ojbect Library

    JavaScript从数组的indexOf()深入之Object的Property机制

    在JavaScript中,数组可以使用Array构造函数来创建,或使用[]快速创建,这也是首选的方法。数组是继承自Object的原型,并且他对typeof没有特殊的返回值,他只返回’object’。 js中,可以说万物皆对象(object),一个...

    《iPhone开发基础教程》

    iphone开发基础教程,使用ojbect-c语言开发。此教程可以为用户提供详细的开发环境介绍。

    Tensorflow object detection API 搭建自带案例的物体识别模型 环境搭建及测试-附件资源

    Tensorflow object detection API 搭建自带案例的物体识别模型 环境搭建及测试-附件资源

    java开发oa系统源码-webservice-learning:网络服务学习

    Inter-Ojbect 协议,结合 RMI 和 CORBA 的优势 COM+ 公共对象模型 SOAP 简单对象访问协议 网络服务 概述跨语言分布式系统集成解决方案/通过[文本]和[套接字]执行不同的应用程序/语言通信 SOAP:Simple Object Access...

    彩色编码强度的matlab代码-servoControl:定制的ArduinoPID伺服控制算法,用于有刷直流电机位置控制以及MATLAB分析

    ojbect_locator节点 在ROS中侦听传入的原始图像。 回调使用OpenCV在图像中定位橙色对象,然后选择帧中最大的连续橙色对象的中心。 然后,系统将大小和位置作为测量值广播到visualServo.ino。 使用强度阈值确定颜色。...

    Python中getattr函数和hasattr函数作用详解

    作用:判断对象object是否包含名为name的特性(hasattr是通过调用getattr(ojbect, name)是否抛出异常来实现的)。 示例: &gt;&gt;&gt; hasattr(list, 'append') True &gt;&gt;&gt; hasattr(list, 'add') False getattr(object,name...

    浅谈python中的getattr函数 hasattr函数

    作用:判断对象object是否包含名为name的特性(hasattr是通过调用getattr(ojbect, name)是否抛出异常来实现的)。 示例: &gt;&gt;&gt; hasattr(list, 'append') True &gt;&gt;&gt; hasattr(list, 'add') False getattr(object,name,...

    简单概括 ==跟equals的区别

     ojbect的 (源代码的149行):出厂默认的话equals等价于 ==   string 类重写equals:比较的是每一个字符是否相等 hashCode(重写equals就一定要重写hashCode)  没有重写hashCode值不会变,重写了hashCode值就...

    EAIntroViewSharp

    Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面 ##关于欢迎界面 很多App第一次启动都会有一个欢迎界面,欢迎界面往往决定这用户对App的第一映像,所以欢迎界面的重要性不言而喻。QQ、微博、知乎等...

    jquery multiSelect 多选下拉框

    jQuery MultiSelect 插件是一款基于 jQuery 的插件,它能够将标准的 HTML `&lt;select&gt;` 元素转换成一个可定制的多选下拉框。这种多选下拉框支持多种高级功能,例如全选/全不选按钮、预设文本、分组选择等,从而极大地...

    reactweb-start:React Web开发基础结构Demo以及资源索引

    不可变数据操作:当然一些非常简单的场景可以直接使用原生的 Ojbect、Array 等 , 大多数既然用到了React的应用,想必都会复杂到一定程度,使用immutable.js 也简化了reducer中的对象拷贝、解构、合并之类的代码。...

    Cache基础语法

    5. **对象变量**:与对象相关的变量,如 `Person.Firstname, Person.Age`。 #### 四、运算符号 1. **算术运算**: - 加 (`+`)、减 (`-`)、乘 (`*`)、除 (`/`) - 整数除 (`\`)、取余 (`#`)、幂 (`**`) - 运算...

    Flash上传头像(包括摄像头拍摄)

    在上传头像的场景中,Flash主要负责处理用户与浏览器之间的交互,尤其是通过摄像头捕获图像这一部分。用户可以通过Flash插件访问电脑上的摄像头,进行实时预览,并拍摄照片作为头像。 1. **Flash API**:Flash提供...

Global site tag (gtag.js) - Google Analytics