您的位置:首页 > 其它

Gson的使用

2015-11-12 21:52 204 查看
应用于json和实体类(或集合)的转换

1、注释过滤转换

GsonBuilder builder = new GsonBuilder();
// 不转换没有 @Expose 注解的字段
builder.excludeFieldsWithoutExposeAnnotation();
Gson gson = builder.create();

// 将JavaBean字符串转换为 JSON------------------(1)
String sUser = gson.toJson(user);
System.out.println(sUser);
// {"id":1001,"name":"张三"}

// 将JSON字符串转换为 JavaBean  ---------------(2)
UserBean user2 = gson.fromJson(sUser, UserBean.class);
System.out.println(user2.getId() + ", " + user2.getName());
// 1001, 张三


2、简单的复合使用(map/list—-json)

//-------------(1):List<String>--->string
String listToJson = gson.toJson(testList);
System.out.println(listToJson);
// prints ["first","second"]

// 将JSON字符串转换为 ArrayList -----(2)
List<String> testList2 = (List<String>) gson.fromJson(listToJson,
new TypeToken<List<String>>() {
}.getType());
System.out.println(testList2);

// 将HashMap字符串转换为 JSON-------(3)
Map<String, String> testMap = new HashMap<String, String>();
testMap.put("id", "id.first");
testMap.put("name", "name.second");

String mapToJson = gson.toJson(testMap);
System.out.println(mapToJson);
// prints {"id":"id.first","name":"name.second"}

// 将JSON字符串转换为 HashMap  --------(4)
Map<String, String> userMap2 = (Map<String, String>) gson.fromJson(
mapToJson, new TypeToken<Map<String, String>>() {
}.getType());
System.out.println(userMap2.get("id"));


3、模板反射对象转换(list<实体类>—–json)

Gson gson = new Gson();
Type type = new TypeToken<List<UserBean>>() {
}.getType();
//----------------(1)
String beanListToJson = gson.toJson(testBeanList, type);
System.out.println(beanListToJson);
// prints [{"id":"id","name":"name"}]
//---------------(2)
List<UserBean> testBeanListFromJson = gson.fromJson(beanListToJson,type);
System.out.println(testBeanListFromJson);
// prints [TestBean@1ea5671[id=id,name=name,birthday=<null>]]


4、嵌套复合使用(实体类—json)

public class GroupBean {
private String id;
private Map<String, UserBean> userMap;
private List<UserBean> userList;
}


////转换:

Gson gson = new Gson();

String sGroupBean = gson.toJson(groupBean, new TypeToken<GroupBean>() {
}.getType());
System.out.println(sGroupBean);
// {"user1":{"id":1001,"name":"张三"},"user2":{"id":1002,"name":"李四"}}

// 将JSON字符串转换为 HashMap
GroupBean groupBean2 = (GroupBean) gson.fromJson(sGroupBean,
new TypeToken<GroupBean>() {
}.getType());
System.out.println(groupBean2);
// 张三


5、Date类型的gson转换:

(1)、date需要序列化和反序列化

(2)、转换

java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<List<UserBean>>() {
}.getType();

//-------------------(1)
String beanListToJson = bean2json(testBeanList, type);
System.out.println("beanListToJson:" + beanListToJson);
// prints beanListToJson:[{"id":"2","name":"小二","birthday":1447336694266},{}]

//-----------------(2)
List<UserBean> testBeanListFromJson = json2bean(beanListToJson, type);
System.out.println(testBeanListFromJson);
// prints [TestBean@77a7f9[id=id,name=name,birthday=Mon Oct 26 12:39:05
// CST 2009]]


////转换方法:

/**
* 序列化方法
*
* @param bean
* @param type
* @return
*/
public static String bean2json(Object bean, Type type) {
/*
* 注释过滤的设置
*/
Gson gson = new GsonBuilder()
.registerTypeAdapter(java.util.Date.class,
new UtilDateSerializer())
.setDateFormat(DateFormat.LONG).create();
return gson.toJson(bean);
}

/**
* 反序列化方法
*
* @param json
* @param type
* @return
*/
public static <T> T json2bean(String json, Type type) {

Gson gson = new GsonBuilder()
.registerTypeAdapter(java.util.Date.class,
new UtilDateDeserializer())
.setDateFormat(DateFormat.LONG).create();
return gson.fromJson(json, type);
}


////具体的序列方法

public class UtilDateDeserializer implements JsonDeserializer<java.util.Date> {
@Override
public java.util.Date deserialize(JsonElement json,
Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
Long date=json.getAsJsonPrimitive().getAsLong();
System.out.println("对Date的转换:"+date);
return new java.util.Date(date);
}

}


/**
* 串行data
*
* @author ZZL
*
*/
public class UtilDateSerializer implements JsonSerializer<java.util.Date> {

@Override
public JsonElement serialize(java.util.Date src, Type typeOfSrc,
JsonSerializationContext context) {
Number num=src.getTime();
return new JsonPrimitive(num);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: