真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

Java如何實現(xiàn)操作JSON的便捷工具類

這篇文章將為大家詳細講解有關Java如何實現(xiàn)操作JSON的便捷工具類,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)公司是一家集網站建設,河西企業(yè)網站建設,河西品牌網站建設,網站定制,河西網站建設報價,網絡營銷,網絡優(yōu)化,河西網站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網站。

具體如下:

對于JSON數(shù)據(jù)格式的處理,自開發(fā)Java以來,已用過多種JSON的開源工具,用得最好,也用得最High的恐怕要屬Google的Gson了。

特別為它寫了一個工具類,放入常備工具中,方便使用。下面是為GSON 1.5版本重寫的工具類。

依賴包:

slf4j-api-1.6.0.jar
slf4j-log4j12-1.6.0.jar
log4j-1.2.15.jar
gson-1.5.jar

/**
 * Copyright 2010 Fuchun.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package my.tools;
import java.lang.reflect.Type;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import org.apache.commons.lang.StringUtils;
/**
 * 包含操作 {@code JSON} 數(shù)據(jù)的常用方法的工具類。
 * 
 * 該工具類使用的 {@code JSON} 轉換引擎是 
 * {@code Google Gson}。 下面是工具類的使用案例:
 *
 * 
 * public class User {
 *   @SerializedName("pwd")
 *   private String password;
 *   @Expose
 *   @SerializedName("uname")
 *   private String username;
 *   @Expose
 *   @Since(1.1)
 *   private String gender;
 *   @Expose
 *   @Since(1.0)
 *   private String sex;
 *
 *   public User() {}
 *   public User(String username, String password, String gender) {
 *     // user constructor code... ... ...
 *   }
 *
 *   public String getUsername()
 *   ... ... ...
 * }
 * List userList = new LinkedList();
 * User jack = new User("Jack", "123456", "Male");
 * User marry = new User("Marry", "888888", "Female");
 * userList.add(jack);
 * userList.add(marry);
 * Type targetType = new TypeToken>(){}.getType();
 * String sUserList1 = JSONUtils.toJson(userList, targetType);
 * sUserList1 ----> [{"uname":"jack","gender":"Male","sex":"Male"},{"uname":"marry","gender":"Female","sex":"Female"}]
 * String sUserList2 = JSONUtils.toJson(userList, targetType, false);
 * sUserList2 ----> [{"uname":"jack","pwd":"123456","gender":"Male","sex":"Male"},{"uname":"marry","pwd":"888888","gender":"Female","sex":"Female"}]
 * String sUserList3 = JSONUtils.toJson(userList, targetType, 1.0d, true);
 * sUserList3 ----> [{"uname":"jack","sex":"Male"},{"uname":"marry","sex":"Female"}]
 * 
 *  * @author Fuchun  * @since ay-commons-lang 1.0  * @version 1.1.0  */ public class JSONUtils {   private static final Logger LOGGER = LoggerFactory.getLogger(JSONUtils.class);   /** 空的 {@code JSON} 數(shù)據(jù) - "{}"。 */   public static final String EMPTY_JSON = "{}";   /** 空的 {@code JSON} 數(shù)組(集合)數(shù)據(jù) - {@code "[]"}。 */   public static final String EMPTY_JSON_ARRAY = "[]";   /** 默認的 {@code JSON} 日期/時間字段的格式化模式。 */   public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss SSS";   /** {@code Google Gson} 的 @Since 注解常用的版本號常量 - {@code 1.0}。 */   public static final double SINCE_VERSION_10 = 1.0d;   /** {@code Google Gson} 的 @Since 注解常用的版本號常量 - {@code 1.1}。 */   public static final double SINCE_VERSION_11 = 1.1d;   /** {@code Google Gson} 的 @Since 注解常用的版本號常量 - {@code 1.2}。 */   public static final double SINCE_VERSION_12 = 1.2d;   /** {@code Google Gson} 的 @Until 注解常用的版本號常量 - {@code 1.0}。 */   public static final double UNTIL_VERSION_10 = SINCE_VERSION_10;   /** {@code Google Gson} 的 @Until 注解常用的版本號常量 - {@code 1.1}。 */   public static final double UNTIL_VERSION_11 = SINCE_VERSION_11;   /** {@code Google Gson} 的 @Until 注解常用的版本號常量 - {@code 1.2}。 */   public static final double UNTIL_VERSION_12 = SINCE_VERSION_12;   /**    * 

   * JSONUtils instances should NOT be constructed in standard programming. Instead,    * the class should be used as JSONUtils.fromJson("foo");.    * 

   * 

   * This constructor is public to permit tools that require a JavaBean instance to operate.    * 

   */   public JSONUtils() {     super();   }   /**    * 將給定的目標對象根據(jù)指定的條件參數(shù)轉換成 {@code JSON} 格式的字符串。    *     * 該方法轉換發(fā)生錯誤時,不會拋出任何異常。若發(fā)生錯誤時,曾通對象返回 "{}"; 集合或數(shù)組對象返回 "[]"    *     *    * @param target 目標對象。    * @param targetType 目標對象的類型。    * @param isSerializeNulls 是否序列化 {@code null} 值字段。    * @param version 字段的版本號注解。    * @param datePattern 日期字段的格式化模式。    * @param excludesFieldsWithoutExpose 是否排除未標注 {@literal @Expose} 注解的字段。    * @return 目標對象的 {@code JSON} 格式的字符串。    * @since 1.0    */   public static String toJson(Object target, Type targetType, boolean isSerializeNulls, Double version,       String datePattern, boolean excludesFieldsWithoutExpose) {     if (target == null) return EMPTY_JSON;     GsonBuilder builder = new GsonBuilder();     if (isSerializeNulls) builder.serializeNulls();     if (version != null) builder.setVersion(version.doubleValue());     if (StringUtils.isBlank(datePattern)) datePattern = DEFAULT_DATE_PATTERN;     builder.setDateFormat(datePattern);     if (excludesFieldsWithoutExpose) builder.excludeFieldsWithoutExposeAnnotation();     return toJson(target, targetType, builder);   }   /**    * 將給定的目標對象轉換成 {@code JSON} 格式的字符串。此方法只用來轉換普通的 {@code JavaBean} 對象。    * 
       * 
  • 該方法只會轉換標有 {@literal @Expose} 注解的字段;
  •    * 
  • 該方法不會轉換 {@code null} 值字段;
  •    * 
  • 該方法會轉換所有未標注或已標注 {@literal @Since} 的字段;
  •    * 
  • 該方法轉換時使用默認的 日期/時間 格式化模式 - {@code yyyy-MM-dd HH:mm:ss SSS};
  •    * 
   *    * @param target 要轉換成 {@code JSON} 的目標對象。    * @return 目標對象的 {@code JSON} 格式的字符串。    * @since 1.0    */   public static String toJson(Object target) {     return toJson(target, null, false, null, null, true);   }   /**    * 將給定的目標對象轉換成 {@code JSON} 格式的字符串。此方法只用來轉換普通的 {@code JavaBean} 對象。    * 
       * 
  • 該方法只會轉換標有 {@literal @Expose} 注解的字段;
  •    * 
  • 該方法不會轉換 {@code null} 值字段;
  •    * 
  • 該方法會轉換所有未標注或已標注 {@literal @Since} 的字段;
  •    * 
   *    * @param target 要轉換成 {@code JSON} 的目標對象。    * @param datePattern 日期字段的格式化模式。    * @return 目標對象的 {@code JSON} 格式的字符串。    * @since 1.0    */   public static String toJson(Object target, String datePattern) {     return toJson(target, null, false, null, datePattern, true);   }   /**    * 將給定的目標對象轉換成 {@code JSON} 格式的字符串。此方法只用來轉換普通的 {@code JavaBean} 對象。    * 
       * 
  • 該方法只會轉換標有 {@literal @Expose} 注解的字段;
  •    * 
  • 該方法不會轉換 {@code null} 值字段;
  •    * 
  • 該方法轉換時使用默認的 日期/時間 格式化模式 - {@code yyyy-MM-dd HH:mm:ss SSS};
  •    * 
   *    * @param target 要轉換成 {@code JSON} 的目標對象。    * @param version 字段的版本號注解({@literal @Since})。    * @return 目標對象的 {@code JSON} 格式的字符串。    * @since 1.0    */   public static String toJson(Object target, Double version) {     return toJson(target, null, false, version, null, true);   }   /**    * 將給定的目標對象轉換成 {@code JSON} 格式的字符串。此方法只用來轉換普通的 {@code JavaBean} 對象。    * 
       * 
  • 該方法不會轉換 {@code null} 值字段;
  •    * 
  • 該方法會轉換所有未標注或已標注 {@literal @Since} 的字段;
  •    * 
  • 該方法轉換時使用默認的 日期/時間 格式化模式 - {@code yyyy-MM-dd HH:mm:ss SSS};
  •    * 
   *    * @param target 要轉換成 {@code JSON} 的目標對象。    * @param excludesFieldsWithoutExpose 是否排除未標注 {@literal @Expose} 注解的字段。    * @return 目標對象的 {@code JSON} 格式的字符串。    * @since 1.0    */   public static String toJson(Object target, boolean excludesFieldsWithoutExpose) {     return toJson(target, null, false, null, null, excludesFieldsWithoutExpose);   }   /**    * 將給定的目標對象轉換成 {@code JSON} 格式的字符串。此方法只用來轉換普通的 {@code JavaBean} 對象。    * 
       * 
  • 該方法不會轉換 {@code null} 值字段;
  •    * 
  • 該方法轉換時使用默認的 日期/時間 格式化模式 - {@code yyyy-MM-dd HH:mm:ss SSS};
  •    * 
   *    * @param target 要轉換成 {@code JSON} 的目標對象。    * @param version 字段的版本號注解({@literal @Since})。    * @param excludesFieldsWithoutExpose 是否排除未標注 {@literal @Expose} 注解的字段。    * @return 目標對象的 {@code JSON} 格式的字符串。    * @since 1.0    */   public static String toJson(Object target, Double version, boolean excludesFieldsWithoutExpose) {     return toJson(target, null, false, version, null, excludesFieldsWithoutExpose);   }   /**    * 將給定的目標對象轉換成 {@code JSON} 格式的字符串。此方法通常用來轉換使用泛型的對象。    * 
       * 
  • 該方法只會轉換標有 {@literal @Expose} 注解的字段;
  •    * 
  • 該方法不會轉換 {@code null} 值字段;
  •    * 
  • 該方法會轉換所有未標注或已標注 {@literal @Since} 的字段;
  •    * 
  • 該方法轉換時使用默認的 日期/時間 格式化模式 - {@code yyyy-MM-dd HH:mm:ss SSSS};
  •    * 
   *    * @param target 要轉換成 {@code JSON} 的目標對象。    * @param targetType 目標對象的類型。    * @return 目標對象的 {@code JSON} 格式的字符串。    * @since 1.0    */   public static String toJson(Object target, Type targetType) {     return toJson(target, targetType, false, null, null, true);   }   /**    * 將給定的目標對象轉換成 {@code JSON} 格式的字符串。此方法通常用來轉換使用泛型的對象。    * 
       * 
  • 該方法只會轉換標有 {@literal @Expose} 注解的字段;
  •    * 
  • 該方法不會轉換 {@code null} 值字段;
  •    * 
  • 該方法轉換時使用默認的 日期/時間 格式化模式 - {@code yyyy-MM-dd HH:mm:ss SSSS};
  •    * 
   *    * @param target 要轉換成 {@code JSON} 的目標對象。    * @param targetType 目標對象的類型。    * @param version 字段的版本號注解({@literal @Since})。    * @return 目標對象的 {@code JSON} 格式的字符串。    * @since 1.0    */   public static String toJson(Object target, Type targetType, Double version) {     return toJson(target, targetType, false, version, null, true);   }   /**    * 將給定的目標對象轉換成 {@code JSON} 格式的字符串。此方法通常用來轉換使用泛型的對象。    * 
       * 
  • 該方法不會轉換 {@code null} 值字段;
  •    * 
  • 該方法會轉換所有未標注或已標注 {@literal @Since} 的字段;
  •    * 
  • 該方法轉換時使用默認的 日期/時間 格式化模式 - {@code yyyy-MM-dd HH:mm:ss SSS};
  •    * 
   *    * @param target 要轉換成 {@code JSON} 的目標對象。    * @param targetType 目標對象的類型。    * @param excludesFieldsWithoutExpose 是否排除未標注 {@literal @Expose} 注解的字段。    * @return 目標對象的 {@code JSON} 格式的字符串。    * @since 1.0    */   public static String toJson(Object target, Type targetType, boolean excludesFieldsWithoutExpose) {     return toJson(target, targetType, false, null, null, excludesFieldsWithoutExpose);   }   /**    * 將給定的目標對象轉換成 {@code JSON} 格式的字符串。此方法通常用來轉換使用泛型的對象。    * 
       * 
  • 該方法不會轉換 {@code null} 值字段;
  •    * 
  • 該方法轉換時使用默認的 日期/時間 格式化模式 - {@code yyyy-MM-dd HH:mm:ss SSS};
  •    * 
   *    * @param target 要轉換成 {@code JSON} 的目標對象。    * @param targetType 目標對象的類型。    * @param version 字段的版本號注解({@literal @Since})。    * @param excludesFieldsWithoutExpose 是否排除未標注 {@literal @Expose} 注解的字段。    * @return 目標對象的 {@code JSON} 格式的字符串。    * @since 1.0    */   public static String toJson(Object target, Type targetType, Double version, boolean excludesFieldsWithoutExpose) {     return toJson(target, targetType, false, version, null, excludesFieldsWithoutExpose);   }   /**    * 將給定的 {@code JSON} 字符串轉換成指定的類型對象。    *    * @param  要轉換的目標類型。    * @param json 給定的 {@code JSON} 字符串。    * @param token {@code com.google.gson.reflect.TypeToken} 的類型指示類對象。    * @param datePattern 日期格式模式。    * @return 給定的 {@code JSON} 字符串表示的指定的類型對象。    * @since 1.0    */   public static  T fromJson(String json, TypeToken token, String datePattern) {     if (StringUtils.isBlank(json)) {       return null;     }     GsonBuilder builder = new GsonBuilder();     if (StringUtils.isBlank(datePattern)) {       datePattern = DEFAULT_DATE_PATTERN;     }     Gson gson = builder.create();     try {       return gson.fromJson(json, token.getType());     } catch (Exception ex) {       LOGGER.error(json + " 無法轉換為 " + token.getRawType().getName() + " 對象!", ex);       return null;     }   }   /**    * 將給定的 {@code JSON} 字符串轉換成指定的類型對象。    *    * @param  要轉換的目標類型。    * @param json 給定的 {@code JSON} 字符串。    * @param token {@code com.google.gson.reflect.TypeToken} 的類型指示類對象。    * @return 給定的 {@code JSON} 字符串表示的指定的類型對象。    * @since 1.0    */   public static  T fromJson(String json, TypeToken token) {     return fromJson(json, token, null);   }   /**    * 將給定的 {@code JSON} 字符串轉換成指定的類型對象。此方法通常用來轉換普通的 {@code JavaBean} 對象。    *    * @param  要轉換的目標類型。    * @param json 給定的 {@code JSON} 字符串。    * @param clazz 要轉換的目標類。    * @param datePattern 日期格式模式。    * @return 給定的 {@code JSON} 字符串表示的指定的類型對象。    * @since 1.0    */   public static  T fromJson(String json, Class clazz, String datePattern) {     if (StringUtils.isBlank(json)) {       return null;     }     GsonBuilder builder = new GsonBuilder();     if (StringUtils.isBlank(datePattern)) {       datePattern = DEFAULT_DATE_PATTERN;     }     Gson gson = builder.create();     try {       return gson.fromJson(json, clazz);     } catch (Exception ex) {       LOGGER.error(json + " 無法轉換為 " + clazz.getName() + " 對象!", ex);       return null;     }   }   /**    * 將給定的 {@code JSON} 字符串轉換成指定的類型對象。此方法通常用來轉換普通的 {@code JavaBean} 對象。    *    * @param  要轉換的目標類型。    * @param json 給定的 {@code JSON} 字符串。    * @param clazz 要轉換的目標類。    * @return 給定的 {@code JSON} 字符串表示的指定的類型對象。    * @since 1.0    */   public static  T fromJson(String json, Class clazz) {     return fromJson(json, clazz, null);   }   /**    * 將給定的目標對象根據(jù){@code GsonBuilder} 所指定的條件參數(shù)轉換成 {@code JSON} 格式的字符串。    *     * 該方法轉換發(fā)生錯誤時,不會拋出任何異常。若發(fā)生錯誤時,{@code JavaBean} 對象返回 "{}"; 集合或數(shù)組對象返回    * "[]"。 其本基本類型,返回相應的基本值。    *    * @param target 目標對象。    * @param targetType 目標對象的類型。    * @param builder 可定制的{@code Gson} 構建器。    * @return 目標對象的 {@code JSON} 格式的字符串。    * @since 1.1    */   public static String toJson(Object target, Type targetType, GsonBuilder builder) {     if (target == null) return EMPTY_JSON;     Gson gson = null;     if (builder == null) {       gson = new Gson();     } else {       gson = builder.create();     }     String result = EMPTY_JSON;     try {       if (targetType == null) {         result = gson.toJson(target);       } else {         result = gson.toJson(target, targetType);       }     } catch (Exception ex) {       LOGGER.warn("目標對象 " + target.getClass().getName() + " 轉換 JSON 字符串時,發(fā)生異常!", ex);       if (target instanceof Collection || target instanceof Iterator || target instanceof Enumeration           || target.getClass().isArray()) {         result = EMPTY_JSON_ARRAY;       }     }     return result;   } }

關于“Java如何實現(xiàn)操作JSON的便捷工具類”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。


本文名稱:Java如何實現(xiàn)操作JSON的便捷工具類
文章URL:http://weahome.cn/article/pseeip.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部