实用的json工具类gson

涉及到的jar包主要是gson-2.0.jar(必须),log4j.jar(可选)



使用方法


1,对象转字符串:String str = JsonUtils.toJson(A, false)//第一个参数具体对象,第二个正常情况下一定要设为false

转回对象A:
Java代码   收藏代码
  1. A  a = JsonUtils.fromJson(str , A.calss)  
,第一个是通过json转的string,第二个参数目标对象

注意:如果是把List对象转String,而List里面的对象中又包含了其他对象,在取出的时候不能用foreach循环取出,

请采用如下方式

Java代码   收藏代码
  1. List roList = JsonUtils.fromJson(str,List.class); //str是List转为的string对象  
  2.   
  3. for (int i = 0; i < roList.size(); i++) {  
  4.   
  5. ResultObject ro = JsonUtils.fromJson(JsonUtils.toJson(roList.get(i), false),  
  6.   
  7. ResultObject.class);  
  8.   
  9. }  


更多关于原生json内容请参考http://learning.iteye.com/blog/1289255
Java代码   收藏代码
  1. import java.lang.reflect.Type;    
  2. import java.util.Collection;    
  3. import java.util.Enumeration;    
  4. import java.util.Iterator;    
  5.     
  6. import org.apache.commons.logging.Log;    
  7. import org.apache.commons.logging.LogFactory;    
  8.     
  9. import com.google.gson.Gson;    
  10. import com.google.gson.GsonBuilder;    
  11. import com.google.gson.reflect.TypeToken;    
  12.     
  13. public class JsonUtils {    
  14.     private static final Log log = LogFactory.getLog(JsonUtils.class);    
  15.     public static final String EMPTY = "";    
  16.     /** 空的 {@code JSON} 数据 - <code>"{}"</code>。 */    
  17.     public static final String EMPTY_JSON = "{}";    
  18.     /** 空的 {@code JSON} 数组(集合)数据 - {@code "[]"}。 */    
  19.     public static final String EMPTY_JSON_ARRAY = "[]";    
  20.     /** 默认的 {@code JSON} 日期/时间字段的格式化模式。 */    
  21.     public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss SSS";    
  22.     /** {@code Google Gson} 的 {@literal @Since} 注解常用的版本号常量 - {@code 1.0}。 */    
  23.     public static final Double SINCE_VERSION_10 = 1.0d;    
  24.     /** {@code Google Gson} 的 {@literal @Since} 注解常用的版本号常量 - {@code 1.1}。 */    
  25.     public static final Double SINCE_VERSION_11 = 1.1d;    
  26.     /** {@code Google Gson} 的 {@literal @Since} 注解常用的版本号常量 - {@code 1.2}。 */    
  27.     public static final Double SINCE_VERSION_12 = 1.2d;    
  28.     
  29.     /**  
  30.      * 将给定的目标对象根据指定的条件参数转换成 {@code JSON} 格式的字符串。  
  31.      * <p />  
  32.      * <strong>该方法转换发生错误时,不会抛出任何异常。若发生错误时,曾通对象返回 <code>"{}"</code>; 集合或数组对象返回  
  33.      * <code>"[]"</code></strong>  
  34.      *   
  35.      * @param target  
  36.      *            目标对象。  
  37.      * @param targetType  
  38.      *            目标对象的类型。  
  39.      * @param isSerializeNulls  
  40.      *            是否序列化 {@code null} 值字段。  
  41.      * @param version  
  42.      *            字段的版本号注解。  
  43.      * @param datePattern  
  44.      *            日期字段的格式化模式。  
  45.      * @param excludesFieldsWithoutExpose  
  46.      *            是否排除未标注 {@literal @Expose} 注解的字段。  
  47.      * @return 目标对象的 {@code JSON} 格式的字符串。  
  48.      */    
  49.     public static String toJson(Object target, Type targetType,    
  50.             boolean isSerializeNulls, Double version, String datePattern,    
  51.             boolean excludesFieldsWithoutExpose) {    
  52.         if (target == null)    
  53.             return EMPTY_JSON;    
  54.         GsonBuilder builder = new GsonBuilder();    
  55.         if (isSerializeNulls)    
  56.             builder.serializeNulls();    
  57.         if (version != null)    
  58.             builder.setVersion(version.doubleValue());    
  59.         if (isEmpty(datePattern))    
  60.             datePattern = DEFAULT_DATE_PATTERN;    
  61.         builder.setDateFormat(datePattern);    
  62.         if (excludesFieldsWithoutExpose)    
  63.             builder.excludeFieldsWithoutExposeAnnotation();    
  64.         String result = EMPTY;    
  65.         Gson gson = builder.create();    
  66.         try {    
  67.             if (targetType != null) {    
  68.                 result = gson.toJson(target, targetType);    
  69.             } else {    
  70.                 result = gson.toJson(target);    
  71.             }    
  72.         } catch (Exception ex) {    
  73.             log.warn("目标对象 " + target.getClass().getName()    
  74.                     + " 转换 JSON 字符串时,发生异常!", ex);    
  75.             if (target instanceof Collection || target instanceof Iterator    
  76.                     || target instanceof Enumeration    
  77.                     || target.getClass().isArray()) {    
  78.                 result = EMPTY_JSON_ARRAY;    
  79.             } else    
  80.                 result = EMPTY_JSON;    
  81.         }    
  82.         return result;    
  83.     }    
  84.     
  85.     /**  
  86.      * 将给定的目标对象转换成 {@code JSON} 格式的字符串。<strong>此方法只用来转换普通的 {@code JavaBean}  
  87.      * 对象。</strong>  
  88.      * <ul>  
  89.      * <li>该方法只会转换标有 {@literal @Expose} 注解的字段;</li>  
  90.      * <li>该方法不会转换 {@code null} 值字段;</li>  
  91.      * <li>该方法会转换所有未标注或已标注 {@literal @Since} 的字段;</li>  
  92.      * <li>该方法转换时使用默认的 日期/时间 格式化模式 - {@code yyyy-MM-dd HH:mm:ss SSS};</li>  
  93.      * </ul>  
  94.      *   
  95.      * @param target  
  96.      *            要转换成 {@code JSON} 的目标对象。  
  97.      * @return 目标对象的 {@code JSON} 格式的字符串。  
  98.      */    
  99.     public static String toJson(Object target) {    
  100.         return toJson(target, nullfalsenullnulltrue);    
  101.     }    
  102.     
  103.     /**  
  104.      * 将给定的目标对象转换成 {@code JSON} 格式的字符串。<strong>此方法只用来转换普通的 {@code JavaBean}  
  105.      * 对象。</strong>  
  106.      * <ul>  
  107.      * <li>该方法只会转换标有 {@literal @Expose} 注解的字段;</li>  
  108.      * <li>该方法不会转换 {@code null} 值字段;</li>  
  109.      * <li>该方法会转换所有未标注或已标注 {@literal @Since} 的字段;</li>  
  110.      * </ul>  
  111.      *   
  112.      * @param target  
  113.      *            要转换成 {@code JSON} 的目标对象。  
  114.      * @param datePattern  
  115.      *            日期字段的格式化模式。  
  116.      * @return 目标对象的 {@code JSON} 格式的字符串。  
  117.      */    
  118.     public static String toJson(Object target, String datePattern) {    
  119.         return toJson(target, nullfalsenull, datePattern, true);    
  120.     }    
  121.     
  122.     /**  
  123.      * 将给定的目标对象转换成 {@code JSON} 格式的字符串。<strong>此方法只用来转换普通的 {@code JavaBean}  
  124.      * 对象。</strong>  
  125.      * <ul>  
  126.      * <li>该方法只会转换标有 {@literal @Expose} 注解的字段;</li>  
  127.      * <li>该方法不会转换 {@code null} 值字段;</li>  
  128.      * <li>该方法转换时使用默认的 日期/时间 格式化模式 - {@code yyyy-MM-dd HH:mm:ss SSS};</li>  
  129.      * </ul>  
  130.      *   
  131.      * @param target  
  132.      *            要转换成 {@code JSON} 的目标对象。  
  133.      * @param version  
  134.      *            字段的版本号注解({@literal @Since})。  
  135.      * @return 目标对象的 {@code JSON} 格式的字符串。  
  136.      */    
  137.     public static String toJson(Object target, Double version) {    
  138.         return toJson(target, nullfalse, version, nulltrue);    
  139.     }    
  140.     
  141.     /**  
  142.      * 将给定的目标对象转换成 {@code JSON} 格式的字符串。<strong>此方法只用来转换普通的 {@code JavaBean}  
  143.      * 对象。</strong>  
  144.      * <ul>  
  145.      * <li>该方法不会转换 {@code null} 值字段;</li>  
  146.      * <li>该方法会转换所有未标注或已标注 {@literal @Since} 的字段;</li>  
  147.      * <li>该方法转换时使用默认的 日期/时间 格式化模式 - {@code yyyy-MM-dd HH:mm:ss SSS};</li>  
  148.      * </ul>  
  149.      *   
  150.      * @param target  
  151.      *            要转换成 {@code JSON} 的目标对象。  
  152.      * @param excludesFieldsWithoutExpose  
  153.      *            是否排除未标注 {@literal @Expose} 注解的字段。  
  154.      * @return 目标对象的 {@code JSON} 格式的字符串。  
  155.      */    
  156.     public static String toJson(Object target,    
  157.             boolean excludesFieldsWithoutExpose) {    
  158.         return toJson(target, nullfalsenullnull,    
  159.                 excludesFieldsWithoutExpose);    
  160.     }    
  161.     
  162.     /**  
  163.      * 将给定的目标对象转换成 {@code JSON} 格式的字符串。<strong>此方法只用来转换普通的 {@code JavaBean}  
  164.      * 对象。</strong>  
  165.      * <ul>  
  166.      * <li>该方法不会转换 {@code null} 值字段;</li>  
  167.      * <li>该方法转换时使用默认的 日期/时间 格式化模式 - {@code yyyy-MM-dd HH:mm:ss SSS};</li>  
  168.      * </ul>  
  169.      *   
  170.      * @param target  
  171.      *            要转换成 {@code JSON} 的目标对象。  
  172.      * @param version  
  173.      *            字段的版本号注解({@literal @Since})。  
  174.      * @param excludesFieldsWithoutExpose  
  175.      *            是否排除未标注 {@literal @Expose} 注解的字段。  
  176.      * @return 目标对象的 {@code JSON} 格式的字符串。  
  177.      */    
  178.     public static String toJson(Object target, Double version,    
  179.             boolean excludesFieldsWithoutExpose) {    
  180.         return toJson(target, nullfalse, version, null,    
  181.                 excludesFieldsWithoutExpose);    
  182.     }    
  183.     
  184.     /**  
  185.      * 将给定的目标对象转换成 {@code JSON} 格式的字符串。<strong>此方法通常用来转换使用泛型的对象。</strong>  
  186.      * <ul>  
  187.      * <li>该方法只会转换标有 {@literal @Expose} 注解的字段;</li>  
  188.      * <li>该方法不会转换 {@code null} 值字段;</li>  
  189.      * <li>该方法会转换所有未标注或已标注 {@literal @Since} 的字段;</li>  
  190.      * <li>该方法转换时使用默认的 日期/时间 格式化模式 - {@code yyyy-MM-dd HH:mm:ss SSSS};</li>  
  191.      * </ul>  
  192.      *   
  193.      * @param target  
  194.      *            要转换成 {@code JSON} 的目标对象。  
  195.      * @param targetType  
  196.      *            目标对象的类型。  
  197.      * @return 目标对象的 {@code JSON} 格式的字符串。  
  198.      */    
  199.     public static String toJson(Object target, Type targetType) {    
  200.         return toJson(target, targetType, falsenullnulltrue);    
  201.     }    
  202.     
  203.     /**  
  204.      * 将给定的目标对象转换成 {@code JSON} 格式的字符串。<strong>此方法通常用来转换使用泛型的对象。</strong>  
  205.      * <ul>  
  206.      * <li>该方法只会转换标有 {@literal @Expose} 注解的字段;</li>  
  207.      * <li>该方法不会转换 {@code null} 值字段;</li>  
  208.      * <li>该方法转换时使用默认的 日期/时间 格式化模式 - {@code yyyy-MM-dd HH:mm:ss SSSS};</li>  
  209.      * </ul>  
  210.      *   
  211.      * @param target  
  212.      *            要转换成 {@code JSON} 的目标对象。  
  213.      * @param targetType  
  214.      *            目标对象的类型。  
  215.      * @param version  
  216.      *            字段的版本号注解({@literal @Since})。  
  217.      * @return 目标对象的 {@code JSON} 格式的字符串。  
  218.      */    
  219.     public static String toJson(Object target, Type targetType, Double version) {    
  220.         return toJson(target, targetType, false, version, nulltrue);    
  221.     }    
  222.     
  223.     /**  
  224.      * 将给定的目标对象转换成 {@code JSON} 格式的字符串。<strong>此方法通常用来转换使用泛型的对象。</strong>  
  225.      * <ul>  
  226.      * <li>该方法不会转换 {@code null} 值字段;</li>  
  227.      * <li>该方法会转换所有未标注或已标注 {@literal @Since} 的字段;</li>  
  228.      * <li>该方法转换时使用默认的 日期/时间 格式化模式 - {@code yyyy-MM-dd HH:mm:ss SSS};</li>  
  229.      * </ul>  
  230.      *   
  231.      * @param target  
  232.      *            要转换成 {@code JSON} 的目标对象。  
  233.      * @param targetType  
  234.      *            目标对象的类型。  
  235.      * @param excludesFieldsWithoutExpose  
  236.      *            是否排除未标注 {@literal @Expose} 注解的字段。  
  237.      * @return 目标对象的 {@code JSON} 格式的字符串。  
  238.      */    
  239.     public static String toJson(Object target, Type targetType,    
  240.             boolean excludesFieldsWithoutExpose) {    
  241.         return toJson(target, targetType, falsenullnull,    
  242.                 excludesFieldsWithoutExpose);    
  243.     }    
  244.     
  245.     /**  
  246.      * 将给定的目标对象转换成 {@code JSON} 格式的字符串。<strong>此方法通常用来转换使用泛型的对象。</strong>  
  247.      * <ul>  
  248.      * <li>该方法不会转换 {@code null} 值字段;</li>  
  249.      * <li>该方法转换时使用默认的 日期/时间 格式化模式 - {@code yyyy-MM-dd HH:mm:ss SSS};</li>  
  250.      * </ul>  
  251.      *   
  252.      * @param target  
  253.      *            要转换成 {@code JSON} 的目标对象。  
  254.      * @param targetType  
  255.      *            目标对象的类型。  
  256.      * @param version  
  257.      *            字段的版本号注解({@literal @Since})。  
  258.      * @param excludesFieldsWithoutExpose  
  259.      *            是否排除未标注 {@literal @Expose} 注解的字段。  
  260.      * @return 目标对象的 {@code JSON} 格式的字符串。  
  261.      */    
  262.     public static String toJson(Object target, Type targetType, Double version,    
  263.             boolean excludesFieldsWithoutExpose) {    
  264.         return toJson(target, targetType, false, version, null,    
  265.                 excludesFieldsWithoutExpose);    
  266.     }    
  267.     
  268.     /**  
  269.      * 将给定的 {@code JSON} 字符串转换成指定的类型对象。  
  270.      *   
  271.      * @param <T>  
  272.      *            要转换的目标类型。  
  273.      * @param json  
  274.      *            给定的 {@code JSON} 字符串。  
  275.      * @param token  
  276.      *            {@code com.google.gson.reflect.TypeToken} 的类型指示类对象。  
  277.      * @param datePattern  
  278.      *            日期格式模式。  
  279.      * @return 给定的 {@code JSON} 字符串表示的指定的类型对象。  
  280.      */    
  281.     public static <T> T fromJson(String json, TypeToken<T> token,    
  282.             String datePattern) {    
  283.         if (isEmpty(json)) {    
  284.             return null;    
  285.         }    
  286.         GsonBuilder builder = new GsonBuilder();    
  287.         if (isEmpty(datePattern)) {    
  288.             datePattern = DEFAULT_DATE_PATTERN;    
  289.         }    
  290.         Gson gson = builder.create();    
  291.         try {    
  292.             return gson.fromJson(json, token.getType());    
  293.         } catch (Exception ex) {    
  294.             log.error(json + " 无法转换为 " + token.getRawType().getName() + " 对象!",    
  295.                     ex);    
  296.             return null;    
  297.         }    
  298.     }    
  299.     
  300.     /**  
  301.      * 将给定的 {@code JSON} 字符串转换成指定的类型对象。  
  302.      *   
  303.      * @param <T>  
  304.      *            要转换的目标类型。  
  305.      * @param json  
  306.      *            给定的 {@code JSON} 字符串。  
  307.      * @param token  
  308.      *            {@code com.google.gson.reflect.TypeToken} 的类型指示类对象。  
  309.      * @return 给定的 {@code JSON} 字符串表示的指定的类型对象。  
  310.      */    
  311.     public static <T> T fromJson(String json, TypeToken<T> token) {    
  312.         return fromJson(json, token, null);    
  313.     }    
  314.     
  315.     /**  
  316.      * 将给定的 {@code JSON} 字符串转换成指定的类型对象。<strong>此方法通常用来转换普通的 {@code JavaBean}  
  317.      * 对象。</strong>  
  318.      *   
  319.      * @param <T>  
  320.      *            要转换的目标类型。  
  321.      * @param json  
  322.      *            给定的 {@code JSON} 字符串。  
  323.      * @param clazz  
  324.      *            要转换的目标类。  
  325.      * @param datePattern  
  326.      *            日期格式模式。  
  327.      * @return 给定的 {@code JSON} 字符串表示的指定的类型对象。  
  328.      */    
  329.     public static <T> T fromJson(String json, Class<T> clazz, String datePattern) {    
  330.         if (isEmpty(json)) {    
  331.             return null;    
  332.         }    
  333.         GsonBuilder builder = new GsonBuilder();    
  334.         if (isEmpty(datePattern)) {    
  335.             datePattern = DEFAULT_DATE_PATTERN;    
  336.         }    
  337.         Gson gson = builder.create();    
  338.         try {    
  339.             return gson.fromJson(json, clazz);    
  340.         } catch (Exception ex) {    
  341.             log.error(json + " 无法转换为 " + clazz.getName() + " 对象!", ex);    
  342.             return null;    
  343.         }    
  344.     }    
  345.     
  346.     /**  
  347.      * 将给定的 {@code JSON} 字符串转换成指定的类型对象。<strong>此方法通常用来转换普通的 {@code JavaBean}  
  348.      * 对象。</strong>  
  349.      *   
  350.      * @param <T>  
  351.      *            要转换的目标类型。  
  352.      * @param json  
  353.      *            给定的 {@code JSON} 字符串。  
  354.      * @param clazz  
  355.      *            要转换的目标类。  
  356.      * @return 给定的 {@code JSON} 字符串表示的指定的类型对象。  
  357.      */    
  358.     public static <T> T fromJson(String json, Class<T> clazz) {    
  359.         return fromJson(json, clazz, null);    
  360.     }    
  361.     
  362.     public static boolean isEmpty(String inStr) {    
  363.         boolean reTag = false;    
  364.         if (inStr == null || "".equals(inStr)) {    
  365.             reTag = true;    
  366.         }    
  367.         return reTag;    
  368.     }    
  369. }   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值