亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

基于JSON和java對象的互轉方法

 更新時間:2017年09月06日 08:17:14   作者:firs大風吹  
下面小編就為大家?guī)硪黄贘SON和java對象的互轉方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

先說下我自己的理解,一般而言,JSON字符串要轉為java對象需要自己寫一個跟JSON一模一樣的實體類bean,然后用bean.class作為參數(shù)傳給對應的方法,實現(xiàn)轉化成功。

上述這種方法太麻煩了。其實有一種東西叫jsonObject可以直接不用新建實體類bean,而實現(xiàn)轉化,先說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工具類,實現(xiàn)了實體類和Json數(shù)據(jù)格式之間的互轉功能 使用實例:<br>
*/
public class JsonUtils {
 /**
  * 將一個實體類對象轉換成Json數(shù)據(jù)格式
  * 
  * @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數(shù)據(jù)格式返回
  * 
  * @param list
  *   需要進行轉換的List對象
  * @return 轉換后的Json數(shù)據(jù)格式字符串
  */
 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();
 }

 /**
  * 將一個對象數(shù)組轉換成Json數(shù)據(jù)格式返回
  * 
  * @param array
  *   需要進行轉換的數(shù)組對象
  * @return 轉換后的Json數(shù)據(jù)格式字符串
  */
 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數(shù)據(jù)格式返回
  * 
  * @param map
  *   需要進行轉換的Map對象
  * @return 轉換后的Json數(shù)據(jù)格式字符串
  */
 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數(shù)據(jù)格式返回
  * 
  * @param set
  *   需要進行轉換的Set對象
  * @return 轉換后的Json數(shù)據(jù)格式字符串
  */
 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(); 
  //設置為中國上海時區(qū) 
  objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8")); 
  //空值不序列化 
  objectMapper.setSerializationInclusion(Include.NON_NULL); 
  //反序列化時,屬性不存在的兼容處理 
  objectMapper.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); 
  //序列化時,日期的統(tǒng)一格式 
  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("對象參數(shù)不能為空。");
   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處理含有嵌套關系對象,避免出現(xiàn)異常:net.sf.json.JSONException: There is a cycle in the hierarchy的方法
  * 注意:這樣獲得到的字符串中,引起嵌套循環(huán)的屬性會置為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處理含有嵌套關系對象,避免出現(xiàn)異常:net.sf.json.JSONException: There is a cycle in the hierarchy的方法

  * 注意:這樣獲得到的字符串中,引起嵌套循環(huán)的屬性會置為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則相對來說依賴的包少一些,速度和性能方面沒有怎么進行測試。

以上這篇基于JSON和java對象的互轉方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java 數(shù)據(jù)結構與算法系列精講之哈希算法實現(xiàn)

    Java 數(shù)據(jù)結構與算法系列精講之哈希算法實現(xiàn)

    哈希表本質是一種(key,value)結構,由此我們可以聯(lián)想到,能不能把哈希表的key映射成數(shù)組的索引index呢?如果這樣做的話那么查詢相當于直接查詢索引,查詢時間復雜度為O(1),其實這也正是當key為int型時的做法,將key通過某種做法映射成index,從而轉換成數(shù)組結構
    2022-02-02
  • log4j2日志異步打印(實例講解)

    log4j2日志異步打印(實例講解)

    下面小編就為大家?guī)硪黄猯og4j2日志異步打印(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • springboot如何實現(xiàn)導入其他配置類

    springboot如何實現(xiàn)導入其他配置類

    這篇文章主要介紹了springboot如何實現(xiàn)導入其他配置類問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • springboot項目配置swagger2示例詳解

    springboot項目配置swagger2示例詳解

    Swagger是一款RESTful接口的文檔在線自動生成、功能測試功能框架。本文重點給大家介紹springboot項目配置swagger2示例代碼詳解,需要的朋友參考下吧
    2021-09-09
  • java處理解析帶有反斜杠的json

    java處理解析帶有反斜杠的json

    在Java中操作JSON數(shù)據(jù)是一項常見的任務,其中一個常見的問題是如何在JSON字符串中包含反斜杠,本文主要介紹了java處理解析帶有反斜杠的json,感興趣的可以了解一下
    2024-01-01
  • Spring Security 自定義短信登錄認證的實現(xiàn)

    Spring Security 自定義短信登錄認證的實現(xiàn)

    這篇文章主要介紹了Spring Security 自定義短信登錄認證的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 2020最新版SSM框架整合教程

    2020最新版SSM框架整合教程

    這篇文章主要介紹了2020最新版SSM框架整合教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • 淺談Java基準性能測試之JMH

    淺談Java基準性能測試之JMH

    JMH是Java Microbenchmark Harness的簡稱,一個針對Java做基準測試的工具。想準確的對一段代碼做基準性能測試并不容易,因為JVM層面在編譯期、運行時對代碼做很多優(yōu)化,當代碼塊處于整個系統(tǒng)中運行時并不一定會生效,產生錯誤的基準測試結果,這個問題就是JMH要解決的
    2021-06-06
  • MyBatis代碼自動生成器Mybatis-Generator的使用詳解

    MyBatis代碼自動生成器Mybatis-Generator的使用詳解

    本文詳細介紹如何在SpringBoot項目中使用MyBatis-Generator進行代碼生成,包括配置文件的添加、POM依賴配置、運行配置等步驟,通過自動生成代碼,可以簡化MyBatis的繁瑣配置和SQL編寫,提高開發(fā)效率,注意要考慮MySQL版本兼容性,以及確保路徑配置正確
    2024-10-10
  • 在Java中輕松使用工廠設計模式介紹

    在Java中輕松使用工廠設計模式介紹

    這篇文章主要介紹了在Java中輕松使用工廠設計模式介紹,工廠設計模式或工廠方法設計模式是一種廣泛使用且易于理解的設計模式,文章通過圍繞主題展開詳細的內容介紹,感興趣的朋友可以參考一下
    2022-09-09

最新評論