gson入门示例项目介绍:GSON Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Jav
gson入门示例
项目介绍:GSON
Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象。
Gson支持任意复杂Java对象包括没有源代码的对象.
Gson有2个最基本的方法
1) toJson() – 转换java 对象到JSON
2) fromJson() – 转换JSON到java对象
1 gson下载包:http://code.google.com/p/google-gson
2 参考资料:
http://wangcheng.iteye.com/blog/550831
http://blog.csdn.net/vba_2001/archive/2010/06/25/5695118.aspx
http://www.oschina.net/code/snippet_1611_611
http://www.cnblogs.com/yueue/archive/2010/04/21/1717317.html
3 环境:XP+Myeclipse6.6+JDK1.5+google-gson-1.5
4 代码示例
A 带注解的JavaBean

- ?

- ?

- public?class?JSONUtils?{ ?????? ??????private?static?final?Logger?LOGGER?=?LoggerFactory.getLogger(JSONUtils.class); ????????/**?空的?{@code?JSON}?数据?-?<code>"{}"</code>。?*/??????public?static?final?String?EMPTY_JSON?=?"{}"; ????????/**?空的?{@code?JSON}?数组(集合)数据?-?{@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}?的?<code>@Since</code>?注解常用的版本号常量?-?{@code?1.0}。 ??????*/??????public?static?final?double?SINCE_VERSION_10?=?1.0d; ????????/** ??????*?{@code?Google?Gson}?的?<code>@Since</code>?注解常用的版本号常量?-?{@code?1.1}。 ??????*/??????public?static?final?double?SINCE_VERSION_11?=?1.1d; ????????/** ??????*?{@code?Google?Gson}?的?<code>@Since</code>?注解常用的版本号常量?-?{@code?1.2}。 ??????*/??????public?static?final?double?SINCE_VERSION_12?=?1.2d; ????????/** ??????*?{@code?Google?Gson}?的?<code>@Until</code>?注解常用的版本号常量?-?{@code?1.0}。 ??????*/??????public?static?final?double?UNTIL_VERSION_10?=?SINCE_VERSION_10; ????????/** ??????*?{@code?Google?Gson}?的?<code>@Until</code>?注解常用的版本号常量?-?{@code?1.1}。 ??????*/??????public?static?final?double?UNTIL_VERSION_11?=?SINCE_VERSION_11; ????????/** ??????*?{@code?Google?Gson}?的?<code>@Until</code>?注解常用的版本号常量?-?{@code?1.2}。 ??????*/??????public?static?final?double?UNTIL_VERSION_12?=?SINCE_VERSION_12; ????????/** ??????*?<p> ??????*?<code>JSONUtils</code>?instances?should?NOT?be?constructed?in?standard ??????*?programming.?Instead,?the?class?should?be?used?as ??????*?<code>JSONUtils.fromJson("foo");</code>. ??????*?</p> ??????*?<p> ??????*?This?constructor?is?public?to?permit?tools?that?require?a?JavaBean ??????*?instance?to?operate. ??????*?</p> ??????*/??????public?JSONUtils()?{ ??????????super(); ??????} ????????/** ??????*?将给定的目标对象根据指定的条件参数转换成?{@code?JSON}?格式的字符串。 ??????*?<p?/> ??????*?<strong>该方法转换发生错误时,不会抛出任何异常。若发生错误时,曾通对象返回?<code>"{}"</code>;?集合或数组对象返回 ??????*?<code>"[]"</code>?</strong> ??????*? ??????*?@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}?格式的字符串。<strong>此方法只用来转换普通的?{@code?JavaBean}?对象。</strong> ??????*?<ul> ??????*?<li>该方法只会转换标有?{@literal?@Expose}?注解的字段;</li> ??????*?<li>该方法不会转换?{@code?null}?值字段;</li> ??????*?<li>该方法会转换所有未标注或已标注?{@literal?@Since}?的字段;</li> ??????*?<li>该方法转换时使用默认的?日期/时间?格式化模式?-?{@code?yyyy-MM-dd?HH:mm:ss?SSS};</li> ??????*?</ul> ??????*? ??????*?@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}?格式的字符串。<strong>此方法只用来转换普通的?{@code?JavaBean}?对象。</strong> ??????*?<ul> ??????*?<li>该方法只会转换标有?{@literal?@Expose}?注解的字段;</li> ??????*?<li>该方法不会转换?{@code?null}?值字段;</li> ??????*?<li>该方法会转换所有未标注或已标注?{@literal?@Since}?的字段;</li> ??????*?</ul> ??????*? ??????*?@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}?格式的字符串。<strong>此方法只用来转换普通的?{@code?JavaBean}?对象。</strong> ??????*?<ul> ??????*?<li>该方法只会转换标有?{@literal?@Expose}?注解的字段;</li> ??????*?<li>该方法不会转换?{@code?null}?值字段;</li> ??????*?<li>该方法转换时使用默认的?日期/时间?格式化模式?-?{@code?yyyy-MM-dd?HH:mm:ss?SSS};</li> ??????*?</ul> ??????*? ??????*?@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}?格式的字符串。<strong>此方法只用来转换普通的?{@code?JavaBean}?对象。</strong> ??????*?<ul> ??????*?<li>该方法不会转换?{@code?null}?值字段;</li> ??????*?<li>该方法会转换所有未标注或已标注?{@literal?@Since}?的字段;</li> ??????*?<li>该方法转换时使用默认的?日期/时间?格式化模式?-?{@code?yyyy-MM-dd?HH:mm:ss?SSS};</li> ??????*?</ul> ??????*? ??????*?@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}?格式的字符串。<strong>此方法只用来转换普通的?{@code?JavaBean}?对象。</strong> ??????*?<ul> ??????*?<li>该方法不会转换?{@code?null}?值字段;</li> ??????*?<li>该方法转换时使用默认的?日期/时间?格式化模式?-?{@code?yyyy-MM-dd?HH:mm:ss?SSS};</li> ??????*?</ul> ??????*? ??????*?@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}?格式的字符串。<strong>此方法通常用来转换使用泛型的对象。</strong> ??????*?<ul> ??????*?<li>该方法只会转换标有?{@literal?@Expose}?注解的字段;</li> ??????*?<li>该方法不会转换?{@code?null}?值字段;</li> ??????*?<li>该方法会转换所有未标注或已标注?{@literal?@Since}?的字段;</li> ??????*?<li>该方法转换时使用默认的?日期/时间?格式化模式?-?{@code?yyyy-MM-dd?HH:mm:ss?SSSS};</li> ??????*?</ul> ??????*? ??????*?@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}?格式的字符串。<strong>此方法通常用来转换使用泛型的对象。</strong> ??????*?<ul> ??????*?<li>该方法只会转换标有?{@literal?@Expose}?注解的字段;</li> ??????*?<li>该方法不会转换?{@code?null}?值字段;</li> ??????*?<li>该方法转换时使用默认的?日期/时间?格式化模式?-?{@code?yyyy-MM-dd?HH:mm:ss?SSSS};</li> ??????*?</ul> ??????*? ??????*?@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}?格式的字符串。<strong>此方法通常用来转换使用泛型的对象。</strong> ??????*?<ul> ??????*?<li>该方法不会转换?{@code?null}?值字段;</li> ??????*?<li>该方法会转换所有未标注或已标注?{@literal?@Since}?的字段;</li> ??????*?<li>该方法转换时使用默认的?日期/时间?格式化模式?-?{@code?yyyy-MM-dd?HH:mm:ss?SSS};</li> ??????*?</ul> ??????*? ??????*?@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}?格式的字符串。<strong>此方法通常用来转换使用泛型的对象。</strong> ??????*?<ul> ??????*?<li>该方法不会转换?{@code?null}?值字段;</li> ??????*?<li>该方法转换时使用默认的?日期/时间?格式化模式?-?{@code?yyyy-MM-dd?HH:mm:ss?SSS};</li> ??????*?</ul> ??????*? ??????*?@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?<T> ??????*????????????要转换的目标类型。 ??????*?@param?json ??????*????????????给定的?{@code?JSON}?字符串。 ??????*?@param?token ??????*????????????{@code?com.google.gson.reflect.TypeToken}?的类型指示类对象。 ??????*?@param?datePattern ??????*????????????日期格式模式。 ??????*?@return?给定的?{@code?JSON}?字符串表示的指定的类型对象。 ??????*?@since?1.0 ??????*/??????public?static?<T>?T?fromJson(String?json,?TypeToken<T>?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?<T> ??????*????????????要转换的目标类型。 ??????*?@param?json ??????*????????????给定的?{@code?JSON}?字符串。 ??????*?@param?token ??????*????????????{@code?com.google.gson.reflect.TypeToken}?的类型指示类对象。 ??????*?@return?给定的?{@code?JSON}?字符串表示的指定的类型对象。 ??????*?@since?1.0 ??????*/??????public?static?<T>?T?fromJson(String?json,?TypeToken<T>?token)?{ ??????????return?fromJson(json,?token,?null); ??????} ????????/** ??????*?将给定的?{@code?JSON}?字符串转换成指定的类型对象。<strong>此方法通常用来转换普通的?{@code?JavaBean} ??????*?对象。</strong> ??????*? ??

