您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關java對象怎么與JSON互相轉換,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
具體方法如下:
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則相對來說依賴的包少一些,速度和性能方面沒有怎么進行測試。
關于java對象怎么與JSON互相轉換就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。