JSON和java对象的互转

来源:互联网 发布:2016淘宝客计入权重吗 编辑:程序博客网 时间:2024/06/12 22:37

org.json.JSONObject这个JSONObject,贴上代码:

复制代码
import java.beans.IntrospectionException;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import org.json.JSONObject;/*** Json工具类,实现了实体类和Json数据格式之间的互转功能 使用实例:<br>*/public class JsonUtils {    /**     * 将一个实体类对象转换成Json数据格式     *      * @param bean     *            需要转换的实体类对象     * @return 转换后的Json格式字符串     */    private static String beanToJson(Object bean) {        StringBuilder json = new StringBuilder();        json.append("{");        PropertyDescriptor[] props = null;        try {            props = Introspector.getBeanInfo(bean.getClass(), Object.class)                    .getPropertyDescriptors();        } catch (IntrospectionException e) {        }        if (props != null) {            for (int i = 0; i < props.length; i++) {                try {                    String name = objToJson(props[i].getName());                    String value = objToJson(props[i].getReadMethod()                            .invoke(bean));                    json.append(name);                    json.append(":");                    json.append(value);                    json.append(",");                } catch (Exception e) {                }            }            json.setCharAt(json.length() - 1, '}');        } else {            json.append("}");        }        return json.toString();    }    /**     * 将一个List对象转换成Json数据格式返回     *      * @param list     *            需要进行转换的List对象     * @return 转换后的Json数据格式字符串     */    private static String listToJson(List<?> list) {        StringBuilder json = new StringBuilder();        json.append("[");        if (list != null && list.size() > 0) {            for (Object obj : list) {                json.append(objToJson(obj));                json.append(",");            }            json.setCharAt(json.length() - 1, ']');        } else {            json.append("]");        }        return json.toString();    }    /**     * 将一个对象数组转换成Json数据格式返回     *      * @param array     *            需要进行转换的数组对象     * @return 转换后的Json数据格式字符串     */    private static String arrayToJson(Object[] array) {        StringBuilder json = new StringBuilder();        json.append("[");        if (array != null && array.length > 0) {            for (Object obj : array) {                json.append(objToJson(obj));                json.append(",");            }            json.setCharAt(json.length() - 1, ']');        } else {            json.append("]");        }        return json.toString();    }    /**     * 将一个Map对象转换成Json数据格式返回     *      * @param map     *            需要进行转换的Map对象     * @return 转换后的Json数据格式字符串     */    private static String mapToJson(Map<?, ?> map) {        StringBuilder json = new StringBuilder();        json.append("{");        if (map != null && map.size() > 0) {            for (Object key : map.keySet()) {                json.append(objToJson(key));                json.append(":");                json.append(objToJson(map.get(key)));                json.append(",");            }            json.setCharAt(json.length() - 1, '}');        } else {            json.append("}");        }        return json.toString();    }    /**     * 将一个Set对象转换成Json数据格式返回     *      * @param set     *            需要进行转换的Set对象     * @return 转换后的Json数据格式字符串     */    private static String setToJson(Set<?> set) {        StringBuilder json = new StringBuilder();        json.append("[");        if (set != null && set.size() > 0) {            for (Object obj : set) {                json.append(objToJson(obj));                json.append(",");            }            json.setCharAt(json.length() - 1, ']');        } else {            json.append("]");        }        return json.toString();    }    private static String stringToJson(String s) {        if (s == null) {            return "";        }        StringBuilder sb = new StringBuilder();        for (int i = 0; i < s.length(); i++) {            char ch = s.charAt(i);            switch (ch) {            case '"':                sb.append("\\\"");                break;            case '\\':                sb.append("\\\\");                break;            case '\b':                sb.append("\\b");                break;            case '\f':                sb.append("\\f");                break;            case '\n':                sb.append("\\n");                break;            case '\r':                sb.append("\\r");                break;            case '\t':                sb.append("\\t");                break;            case '/':                sb.append("\\/");                break;            default:                if (ch >= '\u0000' && ch <= '\u001F') {                    String ss = Integer.toHexString(ch);                    sb.append("\\u");                    for (int k = 0; k < 4 - ss.length(); k++) {                        sb.append('0');                    }                    sb.append(ss.toUpperCase());                } else {                    sb.append(ch);                }            }        }        return sb.toString();    }    public static String objToJson(Object obj) {        StringBuilder json = new StringBuilder();        if (obj == null) {            json.append("\"\"");        } else if (obj instanceof Number) {            Number num = (Number)obj;            json.append(num.toString());        } else if (obj instanceof Boolean) {            Boolean bl = (Boolean)obj;            json.append(bl.toString());        } else if (obj instanceof String) {            json.append("\"").append(stringToJson(obj.toString())).append("\"");        } else if (obj instanceof Object[]) {            json.append(arrayToJson((Object[]) obj));        } else if (obj instanceof List) {            json.append(listToJson((List) obj));        } else if (obj instanceof Map) {            json.append(mapToJson((Map) obj));        } else if (obj instanceof Set) {            json.append(setToJson((Set) obj));        } else {            json.append(beanToJson(obj));        }        return json.toString();    }        /**      * @Title: json2Map      * @Creater: chencc <br>      * @Date: 2011-3-28 <br>      * @Description: TODO转化json2map      * @param @param jsonString      * @param @return      * @return Map<String,Object>      * @throws     */    @SuppressWarnings("unchecked")    public static Map<String, Object> json2Map(String jsonString) {                Map<String, Object> map = new HashMap<String, Object>();        try {            if(null != jsonString && !"".equals(jsonString)){                JSONObject jsonObject = new JSONObject(jsonString);                            Iterator keyIter = jsonObject.keys();                String key = "";                Object value = null;                            while (keyIter.hasNext()) {                    key = (String) keyIter.next();                    value = jsonObject.get(key);                    map.put(key, value);                }            }        } catch (Exception e) {            e.printStackTrace();        }        return map;    }        //测试方法    public static void main(String[] args) {        Map<String,Object> params = new HashMap<String,Object>();        params.put("callId123", Integer.valueOf(1000));        Map retMap = new HashMap();        retMap.put("params", params);        retMap.put("result", true);        List ls = new ArrayList();        ls.add(new HashMap());        ls.add("hello world!!");        ls.add(new String[4]);        retMap.put("list", ls);                String[] strArray = new String[10];        strArray[1]="first";        strArray[2]="2";        strArray[3]="3";        System.out.println("Boolean:"+JsonUtils.objToJson(true));        System.out.println("Number:"+JsonUtils.objToJson(23.3));        System.out.println("String:"+JsonUtils.objToJson("sdhfsjdgksdlkjfk\"sd,!#%$^&*#(*@&*%&*$fsdfsdfsdf"));        System.out.println("Map :"+JsonUtils.objToJson(retMap));        System.out.println("List:"+JsonUtils.objToJson(ls));        System.out.println("Array:"+JsonUtils.objToJson(strArray));                String json = JsonUtils.objToJson(retMap);        Map r = JsonUtils.json2Map(json);        System.out.println(r.get("callId123"));                    }}
复制代码

再来聊聊net.sf.json.JSONObject这个JSONObject,代码如下

复制代码
import java.io.IOException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.HashMap;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import java.util.TimeZone;import net.sf.json.JSONArray;import net.sf.json.JSONObject;import net.sf.json.JsonConfig;import net.sf.json.util.CycleDetectionStrategy;import net.sf.json.util.PropertyFilter;import com.fasterxml.jackson.annotation.JsonInclude.Include;import com.fasterxml.jackson.databind.DeserializationFeature;import com.fasterxml.jackson.databind.ObjectMapper;public class JsonUtil {            private static ObjectMapper objectMapper = null;    /**     * JSON初始化     */    static {        objectMapper = new ObjectMapper();          //设置为中国上海时区          objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));          //空值不序列化          objectMapper.setSerializationInclusion(Include.NON_NULL);          //反序列化时,属性不存在的兼容处理          objectMapper.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);          //序列化时,日期的统一格式          objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));          objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);              }             /**     * 把对象转换成为Json字符串     *     * @param obj     * @return     */    public static String convertObjectToJson(Object obj) {        if (obj == null) {//                throw new IllegalArgumentException("对象参数不能为空。");            return null;        }        try {            return objectMapper.writeValueAsString(obj);        }  catch (IOException e) {            e.printStackTrace();        }        return null;    }    /**     *  把json字符串转成Object对象     * @param jsonString     * @return T     */    public static <T> T parseJsonToObject(String jsonString, Class<T> valueType) {                if(jsonString == null || "".equals((jsonString))){            return null;        }        try {            return objectMapper.readValue(jsonString, valueType);        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    /**     *  把json字符串转成List对象     * @param jsonString     * @return List<T>     */    @SuppressWarnings("unchecked")    public static <T> List<T> parseJsonToList(String jsonString,Class<T> valueType) {                if(jsonString == null || "".equals((jsonString))){            return null;        }                List<T> result = new ArrayList<T>();        try {            List<LinkedHashMap<Object, Object>> list = objectMapper.readValue(jsonString, List.class);                        for (LinkedHashMap<Object, Object> map : list) {                                String jsonStr = convertObjectToJson(map);                                T t = parseJsonToObject(jsonStr, valueType);                                result.add(t);            }        } catch (Exception e) {            e.printStackTrace();        }        return result;    }    /**     * JSON处理含有嵌套关系对象,避免出现异常:net.sf.json.JSONException: There is a cycle in the hierarchy的方法     * 注意:这样获得到的字符串中,引起嵌套循环的属性会置为null     *     * @param obj     * @return     */    public static JSONObject getJsonObject(Object obj) {        JsonConfig jsonConfig = new JsonConfig();        jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);        jsonConfig.setJsonPropertyFilter(new PropertyFilter() {                        @Override            public boolean apply(Object source, String name, Object value) {                if(value==null){                    return true;                }                return false;            }        });        return JSONObject.fromObject(obj, jsonConfig);    }    /**     * JSON处理含有嵌套关系对象,避免出现异常:net.sf.json.JSONException: There is a cycle in the hierarchy的方法     * 注意:这样获得到的字符串中,引起嵌套循环的属性会置为null     *     * @param obj     * @return     */    public static JSONArray getJsonArray(Object obj) {        JsonConfig jsonConfig = new JsonConfig();        jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);        return JSONArray.fromObject(obj, jsonConfig);    }    /**     * 解析JSON字符串成一个MAP     *     * @param jsonStr json字符串,格式如: {dictTable:"BM_XB",groupValue:"分组值"}     * @return     */    public static Map<String, Object> parseJsonStr(String jsonStr) {        Map<String, Object> result = new HashMap<String, Object>();        JSONObject jsonObj = JsonUtil.getJsonObject(jsonStr);        for (Object key : jsonObj.keySet()) {            result.put((String) key, jsonObj.get(key));        }        return result;    }}
复制代码

总结:net.sf.json.JSONObject这个属于json-lib这个老牌的系列,依赖的包超级多,commons的lang、logging、beanutils、collections等组件都有。

而org.json则相对来说依赖的包少一些,速度和性能方面没有怎么进行测试。

原创粉丝点击