admin 管理员组文章数量: 1184232
2024年3月7日发(作者:springmvc注解传参数)
gson使用
文章分类:Java编程
gson:谷歌提供的JSON的解决方案。它的站点是/p/google-gson/。
本人用过和的JSON - lib中提供的解决方案。
先说下,它属于轻量级的JSON的。它能够将Object或者ArrayList的转换为JSONObject的和JsonArrayList。但是在反转换的JSON字符串时却只能够提供字符串的结果。所以比较适合 开发者后期处理。
至于的JSON - lib的在反转方面做得比前者强了许多。它通过ject和可以将Bean、ArrayList、HashMap中与JSONObject的互相转换。但是遇到嵌套问题
如一个Bean1->HashMap-> Bean2。当它对该对象反转换时将出现Bean2为JSONObject的对象的情况.
现在讲到gson了.它通过reflection来识别对象.见下面例子:
------------------------ 華麗的分割線-----------------------------
package ;
import ;
import ;
/**
* 普通的UserBean
*/
public class UserBean {
@Expose
private String id;
@Expose
private String name;
private Date birthday;
public String getId() {
return id;
}
public void setId(String id) {
= id;
}
public String getName() {
return name;
}
public void setName(String name) {
= name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
ay = birthday;
}
@Override
public String toString() {
return "UserBean [birthday=" + birthday + ", id=" + id + ", name="
+ name + "]";
}
}
------------------------ 華麗的分割線------------------------------
package ;
import ;
import ;
/**
* 包含Arrylist和HashMap,里面保持UserBean
*/
public class GroupBean {
private String id;
private Map
private List
public String getId() {
return id;
}
public void setId(String id) {
= id;
}
public Map
return userMap;
}
public void setUserMap(Map
p = userMap;
}
public List
return userList;
}
public void setUserList(List
st = userList;
}
@Override
public String toString() {
return "GroupBean [id=" + id + ", userList=" + userList + ", userMap="
+ userMap + "]";
}
}
------------------------ 華麗的分割線------------------------------
------------------------ 華麗的分割線------------------------------
package ;
import an;
import ;
import ilder;
/**
* 通過註釋過濾轉換對象
*/
public class FilterAnnotationTest {
public static void main(String[] args) {
UserBean user = new UserBean();
("1001");
e("张三");
/**
* 设置注释过滤功能
* Gson gson = new GsonBuilder()
* .registerTypeAdapter(, new IdTypeAdapter())
* .serializeNulls()
* .setDateFormat()
* .setFieldNamingPolicy(_CAMEL_CASE)
* .setPrettyPrinting()
* .setVersion(1.0)
* .create();
*/
GsonBuilder builder = new GsonBuilder();
// 不转换没有 @Expose 注解的字段
eFieldsWithoutExposeAnnotation();
Gson gson = ();
// 将JavaBean字符串转换为 JSON
String sUser = (user);
n(sUser);
// {"id":1001,"name":"张三"}
// 将JSON字符串转换为 JavaBean
UserBean user2 = on(sUser, );
n(() + ", " + e());
// 1001, 张三
}
}
------------------------ 華麗的分割線------------------------------
package ;
import ;
import ist;
import ;
import an;
import ;
import ken;
/**
* 模板反射對象Bean
* @author yansheng
*/
public class TemplateTest {
public static void strings) {
List
UserBean testBean = new UserBean();
("1");
e("name");
(testBean);
Gson gson = new Gson();
Type type = new TypeToken>(){}.getType();
String beanListToJson = (testBeanList, type);
n(beanListToJson);
// prints [{"id":"id","name":"name"}]
List
type);
n(testBeanListFromJson);
// prints [TestBean@1ea5671[id=id,name=name,birthday=
}
}
------------------------ 華麗的分割線------------------------------
package ;
import ist;
import p;
import ;
import ;
import ;
import ken;
/**
* 簡單的集合使用
* @author yansheng
*/
public class SimpleCollectionTest {
public static void main(String[] args) {
Gson gson = new Gson();
// 将ArrayList字符串转换为 JSON
List
("first");
("second");
String listToJson = (testList);
n(listToJson);
// prints ["first","second"]
// 将JSON字符串转换为 ArrayList
List
new TypeToken>() {
}.getType());
n(testList2);
// 将HashMap字符串转换为 JSON
Map
("id", "");
("name", "");
String mapToJson = (testMap);
n(mapToJson);
// prints {"id":"","name":""}
// 将JSON字符串转换为 HashMap
Map
on(mapToJson,
new TypeToken
}.getType());
n(("id"));
}
}
------------------------ 華麗的分割線------------------------------
package ;
import ist;
import p;
import ;
import ;
import ean;
import an;
import ;
import ken;
/**
* 嵌套使用對象Bean
* @author yansheng
*/
public class NestedTest {
public static void main(String[] args) {
UserBean user1 = new UserBean();
("1001");
e("张三");
UserBean user2 = new UserBean();
("1002");
e("李四");
Map
("user1", user1);
("user2", user2);
List
(user1);
(user2);
GroupBean groupBean = new GroupBean();
("1");
rMap(userMap);
rList(userList);
Gson gson = new Gson();
String sGroupBean = (groupBean, new TypeToken
{
}.getType());
n(sGroupBean);
// {"user1":{"id":1001,"name":"张三"},"user2":{"id":1002,"name":"李四"}}
// 将JSON字符串转换为 HashMap
GroupBean groupBean2 = (GroupBean) on(sGroupBean,
new TypeToken
}.getType());
n(groupBean2);
// 张三
}
}
------------------------ 華麗的分割線-----------------------------
/**
* 定義對Date的轉換
*/
package ;
import ;
import serializationContext;
import serializer;
import ement;
import rseException;
/**
* 反串行Data
*/
public class UtilDateDeserializer implements
JsonDeserializer<>{
@Override
public deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context)
throws JsonParseException {
return new
(sonPrimitive().getAsLong());
}
}
------------------------ 華麗的分割線-----------------------------
package ;
import ;
import ement;
import imitive;
import rializationContext;
import rializer;
/**
* 串行Data
*/
public class UtilDateSerializer implements
JsonSerializer<> {
@Override
public JsonElement serialize( src, Type typeOfSrc,
JsonSerializationContext context) {
return new JsonPrimitive(e());
}
}
------------------------ 華麗的分割線-----------------------------
package ;
import ;
import rmat;
import ist;
import ;
import an;
import ;
import ilder;
/**
* date測試類
*/
public class DateTest {
/**
* 序列化方法
*
* @param bean
* @param type
* @return
*/
public static String bean2json(Object bean, Type type) {
Gson gson = new
GsonBuilder().registerTypeAdapter(,
new UtilDateSerializer()).setDateFormat()
.create();
return (bean);
}
/**
* 反序列化方法
*
* @param json
* @param type
* @return
*/
public static
Gson gson = new
GsonBuilder().registerTypeAdapter(,
new UtilDateDeserializer()).setDateFormat()
.create();
return on(json, type);
}
public static void main(String[] args) {
List
UserBean testBean = new UserBean();
("id");
e("name");
thday(new ());
(testBean);
type = new
ken>() {
}.getType();
String beanListToJson = bean2json(testBeanList, type);
n("beanListToJson:" + beanListToJson);
// prints [{"id":"id","name":"name","birthday":90}]
List
n(testBeanListFromJson);
// prints [TestBean@77a7f9[id=id,name=name,birthday=Mon Oct 26
12:39:05
// CST 2009]]
}
}
json是以字符串为基础实现的数据载体格式.所以从大局上来讲相对于xml有其自己的灵活性.所以使用gson可以很好的解决以对象为主题的传输问题,毕竟
对象.但是这样做也散失了json的灵活性.所以开发的时候还是需要根据情况选择的.
版权声明:本文标题:gson使用详细教程 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1709805305a546979.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论