zoukankan      html  css  js  c++  java
  • JACKSON JSON 操作帮助类

    一. 引入POM

        <dependency>
           <groupId>net.sf.json-lib</groupId>
           <artifactId>json-lib</artifactId>
           <version>2.4</version>
           <classifier>jdk15</classifier>
        </dependency>
        
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20160810</version>
        </dependency>

    二.代码

    import java.io.File;
    import java.io.IOException;
    import java.nio.charset.Charset;
    import java.util.Collections;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.fasterxml.jackson.core.type.TypeReference;
    import com.fasterxml.jackson.databind.JavaType;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.type.TypeFactory;
    
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    
    public class JacksonUtil {
    
        private static final Logger log = LoggerFactory.getLogger(JacksonUtil.class);
    
        public static final ObjectMapper mapper = new ObjectMapper();
    
        private JacksonUtil() {
            throw new IllegalStateException("Utility class");
        }
        
        /**
         * 将对象序列化成JSON字符串
         * 
         * @param obj
         * @return
         */
        public static String serializeObjectToJson(Object obj) {
            try {
                return mapper.writeValueAsString(obj);
            } catch (Exception e) {
                log.error("serialize object to json", e);
                return null;
            }
        }
    
        /**
         * 将对象序列化到文件
         * 
         * @param obj
         *            要序列化的对象
         * @param file
         *            要写入的文件
         */
        public static void serializeObjectToFile(Object obj, File file) {
            try {
                ObjectMapper mapper = new ObjectMapper();
                mapper.writeValue(file, obj);
            } catch (Exception e) {
                log.error("Serialize Object To Json", e);
            }
        }
    
        /**
         * 从文件读取JSON
         * 
         * @param file
         *            来源文件
         * @param clazz
         *            反序列化成的类
         * @return
         */
        public static <T> T deserializeFormFile(File file, Class<T> clazz) {
            try {
                ObjectMapper mapper = new ObjectMapper();
                return mapper.readValue(file, clazz);
            } catch (Exception e) {
                log.error("Deserialize Json Form File", e);
            }
            return null;
        }
    
        /**
         * 将JSON字符串反序列化成对象
         * 
         * @param json
         *            要反序列化JSON字符串
         * @param typeReference
         *            类型帮助类(带泛型类T为List,Map等泛型类)
         * @return
         */
        @SuppressWarnings("unchecked")
        public static <T> T deserializeJsonToObject(String json, TypeReference<T> typeReference) {
            try {
                return (T) mapper.readValue(json, typeReference);
            } catch (Exception e) {
                log.error("Deserialize Json to Object", e);
                return null;
            }
        }
    
        /**
         * 将JSON字符串反序列化成对象
         * 
         * @param json
         *            要反序列化JSON字符串
         * @param clazz
         *            普通对象类型
         * @return
         */
        public static <T> T deserializeJsonToObject(String json, Class<T> clazz) {
            try {
                return mapper.readValue(json, clazz);
            } catch (Exception e) {
                log.error("Deserialize Json to Object", e);
                return null;
            }
        }
    
        /**
         * 将JSON字符串反序列化成对象
         * 
         * @param json
         *            要反序列化JSON字符串
         * @param javaType
         *            JavaType表示的对象
         * @return
         */
        public static Object deserializeJsonToObject(String json, JavaType javaType) {
            try {
                return mapper.readValue(json, javaType);
            } catch (Exception e) {
                log.error("Deserialize Json to Object", e);
                return null;
            }
        }
    
        /**
         * 获取List类型的JavaType对象
         * 
         * @param clazz
         *            List内部对象类型
         * @return
         */
        public static <T> JavaType getListJavaType(Class<T> clazz) {
            TypeFactory typeFactory = mapper.getTypeFactory();
            return typeFactory.constructCollectionType(List.class, typeFactory.constructType(clazz));
        }
    
        /**
         * 将JSON字符串反序列化成List
         * 
         * @param json
         *            JSON字符串
         * @param clazz
         *            List内部类型
         * @return
         */
        public static <T> List<T> deserializeJsonToList(String json, Class<T> clazz) {
            JavaType javaType = getListJavaType(clazz);
            try {
                return mapper.readValue(json, javaType);
            } catch (Exception e) {
                log.error("Deserialize Json to List", e);
                return Collections.emptyList();
            }
        }
    
        /**
         * 获取Map类型的JavaType对象
         * 
         * @param clazzKey
         *            Map key Type
         * @param clazzValue
         *            Map value Type
         * @return Map类型的JavaType对象
         */
        public static <K, V> JavaType getMapJavaType(Class<K> clazzKey, Class<V> clazzValue) {
            TypeFactory typeFactory = mapper.getTypeFactory();
            return typeFactory.constructMapType(Map.class, typeFactory.constructType(clazzKey),
                    typeFactory.constructType(clazzValue));
        }
    
        /**
         * 将JSON字符串反序列化成Map
         * 
         * @param <K>
         * @param <V>
         * @param json
         *            JSON字符串
         * @param clazzKey
         *            Map key Type
         * @param clazzValue
         *            Map value Type
         * @return Map<K,V>对象
         */
        public static <K, V> Map<K, V> deserializeJsonToMap(String json, Class<K> clazzKey, Class<V> clazzValue) {
            JavaType javaType = getMapJavaType(clazzKey, clazzValue);
            try {
                return mapper.readValue(json, javaType);
            } catch (Exception e) {
                log.error("Deserialize Json to Map", e);
                return null;
            }
        }
    
        /**
         * 将JSON字符串反序列化成List<Map>
         * 
         * @param json
         *            JSON字符串
         * @param clazzKey
         *            key Type
         * @param clazzValue
         *            value Type
         * @return
         */
        public static <K, V> List<Map<K, V>> deserializeJsonToListMap(String json, Class<K> clazzKey, Class<V> clazzValue) {
            JavaType mapType = getMapJavaType(clazzKey, clazzValue);
            TypeFactory typeFactory = mapper.getTypeFactory();
            JavaType javaType = typeFactory.constructCollectionType(List.class, mapType);
            try {
                return mapper.readValue(json, javaType);
            } catch (Exception e) {
                log.error("Deserialize Json to List<Map>", e);
                return Collections.emptyList();
            }
        }
    
        /**
         * 将 LinkedHashMap 转换为正常 JSON 字符串
         * 
         * @param map
         * @param charset
         * @return
         */
        public static String hashMapToJson(Map<?, ?> map, Charset charset) {
            StringBuilder jsonBuilder = new StringBuilder();
            jsonBuilder.append("{");
    
            StringBuilder sBuilder = new StringBuilder();
            for (Iterator<?> it = map.entrySet().iterator(); it.hasNext();) {
                Entry<?, ?> e = (Entry<?, ?>) it.next();
                sBuilder.append(""" + e.getKey() + """ + ":");
                sBuilder.append(""" + e.getValue() + """ + ",");
            }
            
            String jsonString = sBuilder.substring(0, sBuilder.lastIndexOf(","));
    
            jsonBuilder.append(jsonString);
            jsonBuilder.append("}");
    
            byte[] body = jsonBuilder.toString().getBytes(charset);
            return new String(body, charset);
            
        }
        
        /**
         * 
         * @param jsonString
         * @param classz
         *            Object[] obj = getJosnToArray(message, Obj.class);
         * @return
         */
        public static <T> Object[] getJosnToArray(String jsonString, Class<T> classz) {
            // net.sf.jso
            JSONArray array = JSONArray.fromObject(jsonString);
            Object[] obj = new Object[array.size()];
            for (int i = 0; i < array.size(); i++) {
                JSONObject jsonObject = array.getJSONObject(i);
                obj[i] = JSONObject.toBean(jsonObject, classz);
            }
            return obj;
        }
    
        /**
         * 
         * @param jsonString
         * @return
         */
        public static <T> List<T> getJosnToArray(String jsonString) {
            ObjectMapper mapper = new ObjectMapper();
            List<T> list = null;
            try {
                list = mapper.readValue(jsonString, new TypeReference<List<T>>() {});
            } catch (IOException e) {
                log.error("Deserialize Json to List", e);
            }
            return list;
        }
        
    }
  • 相关阅读:
    android 线程的优先级设置方法
    android插件开发
    针对AsyncTask的分析
    针对平板的扩展
    adb shell dumpsys activity
    gzip相关【转帖】
    android中也需要SQL语句
    monkey脚本
    eclipse 引入外部包不能运行 NoClassDefFoundError 的问题
    翻译 : fragment
  • 原文地址:https://www.cnblogs.com/rinack/p/7873191.html
Copyright © 2011-2022 走看看