package com.vcredit.ddcash.batch.util;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;

/**
* Gson Tools
*
* Gson 谷歌的JSON处理工具, 好处是不用担心缺失的属性. 如: 我们的映射对象有A、B、C三个属性,
* 如果JSON字符串缺失了某一个,转换时候不会报错(这样就可以差别不大的映射对象共用), Jackson会报错。
*
*/
public class GsonUtils {
private static final Gson gson = new GsonBuilder().disableHtmlEscaping().create();

/**
* <pre>
* JSON字符串转换为List数组, 提供两种方式(主要解决调用的容易程度)
* 1. TypeToken<List<T>> token 参数转换
* 2. Class<T> cls 方式转换
*
* @param json
* @return List<T>
*
* <pre>
*/
public static <T> List<T> convertList(String json, TypeToken<List<T>> token) {
if (StringUtils.isBlank(json)) {
return new ArrayList<T>();
}
return gson.fromJson(json, token.getType());
}

/**
* <pre>
* Json格式转换, 由JSON字符串转化到制定类型T
*
* @param json
* @param cls
* @return T
*
* <pre>
*/
public static <T> T convertObj(String json, Class<T> cls) {
if (StringUtils.isBlank(json)) {
return null;
}
return gson.fromJson(json, cls);
}

/**
* <pre>
* java对象转化JSON
*
* @return String
*
* <pre>
*/
public static String toJson(Object obj) {
if (obj == null) {
return "";
}
return gson.toJson(obj);
}

public static String getJsonObjectAsString(JsonObject jsonObject, String name) {
if (jsonObject == null || StringUtils.isBlank(name)) {
return null;
}
JsonElement jsonElement = jsonObject.get(name);
return (jsonElement == null) ? null : jsonElement.getAsString();
}

public static JsonObject getJsonObjectChild(JsonObject jsonObject, String name) {
if (jsonObject == null || StringUtils.isBlank(name)) {
return null;
}
JsonElement jsonElement = jsonObject.get(name);
return (jsonElement == null) ? null : jsonElement.getAsJsonObject();
}

public static boolean getJsonObjectAsBoolean(JsonObject jsonObject, String name) {
if (jsonObject == null || StringUtils.isBlank(name)) {
return false;
}
JsonElement jsonElement = jsonObject.get(name);
return (jsonElement == null) ? false : jsonElement.getAsBoolean();
}
}

GsonUtils.java的更多相关文章

  1. gson ajax 数字精度丢失

    ajax传输的json,gson会发生丢失,long > 15的时候会丢失0 解决方案:直接把属性为long的属性自动加上双引号成为js的字符串,这样就不会发生丢失了,ajax自动识别为字符串. ...

  2. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  3. HttpClientUtils.java

    package com.vcredit.ddcash.batch.util; import java.io.BufferedReader;import java.io.ByteArrayOutputS ...

  4. Android GsonUtils工具类

    有那么一个开源jar包,叫gson 可以很方便的将java中的对象和字符串相互转化,数据传输和处理的时候,用到的可能性很大 https://github.com/google/gson http:// ...

  5. java接入微信JS-SDK

    在微信公众号开发中不可,jssdk的接入虽然不是必须,但是根据业务需求我们还是可能用到,下面是自己整理的关于java接入的jssdk的方法,这里是记录关于接入微信JS-SDK的准备工作,关于接入JS- ...

  6. 安卓开发 利用百度识图api进行物体识别(java版)

    之前的随笔中,已经实现了python版本调用api接口,之所以使用python是因为python比java要简洁. 但是我发现在使用过程中,chaquopy插件会弹出底部toast显示"un ...

  7. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  8. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  9. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

随机推荐

  1. vmstat的使用(查看系统各种负载)

    $ vmstatprocs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd f ...

  2. Nginx [emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)

    使用命令关闭占用80端口的程序 sudo fuser -k 80/tcp

  3. 廖雪峰js教程笔记4 sort排序的一些坑

    排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个对象呢?直接比较数学上的大小是没有意义的,因 ...

  4. JDK AIO编程

    NIO2.0引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现.异步通道提供两种方式获取获取操作结果. 通过java.util.concurrent.Future类来表示异步操作的结 ...

  5. coffeeScript学习02

    闭包 closure = do -> _private = "foo" -> _private console.log(closure()) #=> " ...

  6. python 线程之 threading(一)

    threading:基于对象和类的较高层面上的接口,threading模块在内部使用_thread模块来实现线程的对象以及常用的同步化工具的功能. 使用定制类的方式继承 threading.Threa ...

  7. 短信猫 TIdTCPServer TIdTCPClient

    短信猫 服务端: IdTCPServer1: TIdTCPServer; IdAntiFreeze1: TIdAntiFreeze; unit UnitSever; interface uses Wi ...

  8. Web Service \restful web services\WCF Service\ServiceStack

    http://www.cnblogs.com/jfzhu/p/4025448.html http://www.cnblogs.com/jfzhu/p/4022139.html#3043243

  9. (转)POJ题目分类

    初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推. ...

  10. 【BZOJ】2729: [HNOI2012]排队

    题意 \(n\)个男生\(m\)个女生\(2\)个老师排列,任意两个女生不能相邻,两个老师也不能相邻,每个人都不同.问有多少种排法.(\(n, m \le 2000\)) 分析 组合乱搞. 题解 先放 ...