gson的工具類
package com.nohttp.utils;
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.JsonSyntaxException;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/*
* @date 創建時間 2017/7/3
* @author yuansk
* @Description gson的解析
* @version 1.1
*/
public class GsonUtils
{
private static Gson gson = null;
static {
if (gson == null) {
gson = new GsonBuilder()
.registerTypeAdapter(Long.class,new LongDefault0Adapter())
.registerTypeAdapter(long.class,new LongDefault0Adapter())
.registerTypeAdapter(Double.class,new DoubleDefault0Adapter())
.registerTypeAdapter(double.class,new DoubleDefault0Adapter())
.registerTypeAdapter(int.class,new IntegerDefault0Adapter())
.registerTypeAdapter(Integer.class,new IntegerDefault0Adapter())
.registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory()).create();
}
}
private GsonUtils() {
}
public static class IntegerDefault0Adapter implements JsonSerializer<Integer>, JsonDeserializer<Integer>
{
@Override
public Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
if (json.getAsString().equals("") || json.getAsString().equals("null")) {
// /定義爲int類型,如果後臺返回""或者null,則返回0
return 0;
}
} catch (Exception ignore) {
} finally {
try {
return json.getAsInt();
} catch (NumberFormatException e) {
throw new JsonSyntaxException(e);
}
}
}
@Override
public JsonElement serialize(Integer src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src);
}
}
public static class DoubleDefault0Adapter implements JsonSerializer<Double>, JsonDeserializer<Double> {
@Override
public Double deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
if (json.getAsString().equals("") || json.getAsString().equals("null")) {
//定義爲double類型,如果後臺返回""或者null,則返回0.00
//
return 0.00;
}
} catch (Exception ignore) {
}finally {
try {
return json.getAsDouble();
} catch (NumberFormatException e) {
throw new JsonSyntaxException(e);
}
}
}
@Override
public JsonElement serialize(Double src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src);
}
}
public static class LongDefault0Adapter implements JsonSerializer<Long>, JsonDeserializer<Long>
{
@Override
public Long deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
if (json.getAsString().equals("") || json.getAsString().equals("null")) {
//定義爲long類型,如果後臺返回""或者null,則返回0
return 0L;
}
} catch (Exception ignore) {
}finally {
try {
return json.getAsLong();
} catch (NumberFormatException e) {
throw new JsonSyntaxException(e);
}
}
}
@Override
public JsonElement serialize(Long src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src);
}
}
public static class NullStringToEmptyAdapterFactory<T> implements TypeAdapterFactory
{
@SuppressWarnings("unchecked")
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
Class<T> rawType = (Class<T>) type.getRawType();
if (rawType != String.class) {
return null;
}
return (TypeAdapter<T>) new StringNullAdapter();
}
}
public static class StringNullAdapter extends TypeAdapter<String>
{
@Override
public String read(JsonReader reader) throws IOException {
// TODO Auto-generated method stub
if (reader.peek() == JsonToken.NULL) {
reader.nextNull();
return "";
}
return reader.nextString();
}
@Override
public void write(JsonWriter writer, String value) throws IOException {
// TODO Auto-generated method stub
if (value == null) {
writer.nullValue();
return;
}
writer.value(value);
}
}
//忽略字段id
public static Gson getSkipIdGson() {
Gson gson = new GsonBuilder().setExclusionStrategies(
new ExclusionStrategy()
{
@Override
public boolean shouldSkipField(FieldAttributes f) {
//過濾掉字段名包含"id","address"的字段
return f.getName().equals("id");
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
// 過濾掉 類名包含 Bean的類
return false;
}
}).create();
return gson;
}
public static Gson getSkipIdAndGroupIdGson() {
Gson gson = new GsonBuilder().setExclusionStrategies(
new ExclusionStrategy()
{
@Override
public boolean shouldSkipField(FieldAttributes f) {
//過濾掉字段名包含"id","address"的字段
return f.getName().equals("id") | f.getName().equals("groupGuid");
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
// 過濾掉 類名包含 Bean的類
return false;
}
}).create();
return gson;
}
/**
* 將object對象轉成json字符串
*
* @param object
* @return
*/
public static String gsonString(Object object) {
String gsonString = null;
if (gson != null) {
gsonString = gson.toJson(object);
}
return gsonString;
}
/**
* 將gsonString轉成泛型bean
*
* @param gsonString
* @param cls
* @return
*/
public static <T> T gsonToBean(String gsonString, Class<T> cls) {
T t = null;
if (gson != null) {
t = gson.fromJson(gsonString, cls);
}
return t;
}
/**
* 轉成list
* 泛型在編譯期類型被擦除導致報錯
*
* @param gsonString
* @param cls
* @return
*/
public static <T> List<T> gsonToList(String gsonString, Class<T> cls) {
List<T> list = null;
if (gson != null) {
list = gson.fromJson(gsonString, new TypeToken<List<T>>()
{
}.getType());
}
return list;
}
/**
* 轉成list
* 解決泛型問題
*
* @param json
* @param cls
* @param <T>
* @return
*/
public static <T> List<T> jsonToList(String json, Class<T> cls) {
Gson gson = new Gson();
List<T> list = new ArrayList<T>();
JsonArray array = new JsonParser().parse(json).getAsJsonArray();
for (final JsonElement elem : array) {
list.add(gson.fromJson(elem, cls));
}
return list;
}
/**
* 轉成list中有map的
*
* @param gsonString
* @return
*/
public static <T> List<Map<String, T>> GsonToListMaps(String gsonString) {
List<Map<String, T>> list = null;
if (gson != null) {
list = gson.fromJson(gsonString,
new TypeToken<List<Map<String, T>>>()
{
}.getType());
}
return list;
}
/**
* 轉成map的
*
* @param gsonString
* @return
*/
public static <T> Map<String, T> gsonToMaps(String gsonString) {
Map<String, T> map = null;
if (gson != null) {
map = gson.fromJson(gsonString, new TypeToken<Map<String, T>>()
{
}.getType());
}
return map;
}
}
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.JsonSyntaxException;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/*
* @date 創建時間 2017/7/3
* @author yuansk
* @Description gson的解析
* @version 1.1
*/
public class GsonUtils
{
private static Gson gson = null;
static {
if (gson == null) {
gson = new GsonBuilder()
.registerTypeAdapter(Long.class,new LongDefault0Adapter())
.registerTypeAdapter(long.class,new LongDefault0Adapter())
.registerTypeAdapter(Double.class,new DoubleDefault0Adapter())
.registerTypeAdapter(double.class,new DoubleDefault0Adapter())
.registerTypeAdapter(int.class,new IntegerDefault0Adapter())
.registerTypeAdapter(Integer.class,new IntegerDefault0Adapter())
.registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory()).create();
}
}
private GsonUtils() {
}
public static class IntegerDefault0Adapter implements JsonSerializer<Integer>, JsonDeserializer<Integer>
{
@Override
public Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
if (json.getAsString().equals("") || json.getAsString().equals("null")) {
// /定義爲int類型,如果後臺返回""或者null,則返回0
return 0;
}
} catch (Exception ignore) {
} finally {
try {
return json.getAsInt();
} catch (NumberFormatException e) {
throw new JsonSyntaxException(e);
}
}
}
@Override
public JsonElement serialize(Integer src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src);
}
}
public static class DoubleDefault0Adapter implements JsonSerializer<Double>, JsonDeserializer<Double> {
@Override
public Double deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
if (json.getAsString().equals("") || json.getAsString().equals("null")) {
//定義爲double類型,如果後臺返回""或者null,則返回0.00
//
return 0.00;
}
} catch (Exception ignore) {
}finally {
try {
return json.getAsDouble();
} catch (NumberFormatException e) {
throw new JsonSyntaxException(e);
}
}
}
@Override
public JsonElement serialize(Double src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src);
}
}
public static class LongDefault0Adapter implements JsonSerializer<Long>, JsonDeserializer<Long>
{
@Override
public Long deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
if (json.getAsString().equals("") || json.getAsString().equals("null")) {
//定義爲long類型,如果後臺返回""或者null,則返回0
return 0L;
}
} catch (Exception ignore) {
}finally {
try {
return json.getAsLong();
} catch (NumberFormatException e) {
throw new JsonSyntaxException(e);
}
}
}
@Override
public JsonElement serialize(Long src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src);
}
}
public static class NullStringToEmptyAdapterFactory<T> implements TypeAdapterFactory
{
@SuppressWarnings("unchecked")
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
Class<T> rawType = (Class<T>) type.getRawType();
if (rawType != String.class) {
return null;
}
return (TypeAdapter<T>) new StringNullAdapter();
}
}
public static class StringNullAdapter extends TypeAdapter<String>
{
@Override
public String read(JsonReader reader) throws IOException {
// TODO Auto-generated method stub
if (reader.peek() == JsonToken.NULL) {
reader.nextNull();
return "";
}
return reader.nextString();
}
@Override
public void write(JsonWriter writer, String value) throws IOException {
// TODO Auto-generated method stub
if (value == null) {
writer.nullValue();
return;
}
writer.value(value);
}
}
//忽略字段id
public static Gson getSkipIdGson() {
Gson gson = new GsonBuilder().setExclusionStrategies(
new ExclusionStrategy()
{
@Override
public boolean shouldSkipField(FieldAttributes f) {
//過濾掉字段名包含"id","address"的字段
return f.getName().equals("id");
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
// 過濾掉 類名包含 Bean的類
return false;
}
}).create();
return gson;
}
public static Gson getSkipIdAndGroupIdGson() {
Gson gson = new GsonBuilder().setExclusionStrategies(
new ExclusionStrategy()
{
@Override
public boolean shouldSkipField(FieldAttributes f) {
//過濾掉字段名包含"id","address"的字段
return f.getName().equals("id") | f.getName().equals("groupGuid");
}
@Override
public boolean shouldSkipClass(Class<?> clazz) {
// 過濾掉 類名包含 Bean的類
return false;
}
}).create();
return gson;
}
/**
* 將object對象轉成json字符串
*
* @param object
* @return
*/
public static String gsonString(Object object) {
String gsonString = null;
if (gson != null) {
gsonString = gson.toJson(object);
}
return gsonString;
}
/**
* 將gsonString轉成泛型bean
*
* @param gsonString
* @param cls
* @return
*/
public static <T> T gsonToBean(String gsonString, Class<T> cls) {
T t = null;
if (gson != null) {
t = gson.fromJson(gsonString, cls);
}
return t;
}
/**
* 轉成list
* 泛型在編譯期類型被擦除導致報錯
*
* @param gsonString
* @param cls
* @return
*/
public static <T> List<T> gsonToList(String gsonString, Class<T> cls) {
List<T> list = null;
if (gson != null) {
list = gson.fromJson(gsonString, new TypeToken<List<T>>()
{
}.getType());
}
return list;
}
/**
* 轉成list
* 解決泛型問題
*
* @param json
* @param cls
* @param <T>
* @return
*/
public static <T> List<T> jsonToList(String json, Class<T> cls) {
Gson gson = new Gson();
List<T> list = new ArrayList<T>();
JsonArray array = new JsonParser().parse(json).getAsJsonArray();
for (final JsonElement elem : array) {
list.add(gson.fromJson(elem, cls));
}
return list;
}
/**
* 轉成list中有map的
*
* @param gsonString
* @return
*/
public static <T> List<Map<String, T>> GsonToListMaps(String gsonString) {
List<Map<String, T>> list = null;
if (gson != null) {
list = gson.fromJson(gsonString,
new TypeToken<List<Map<String, T>>>()
{
}.getType());
}
return list;
}
/**
* 轉成map的
*
* @param gsonString
* @return
*/
public static <T> Map<String, T> gsonToMaps(String gsonString) {
Map<String, T> map = null;
if (gson != null) {
map = gson.fromJson(gsonString, new TypeToken<Map<String, T>>()
{
}.getType());
}
return map;
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.