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 userMap;

private List userList;

public String getId() {

return id;

}

public void setId(String id) {

= id;

}

public Map getUserMap() {

return userMap;

}

public void setUserMap(Map userMap) {

p = userMap;

}

public List getUserList() {

return userList;

}

public void setUserList(List userList) {

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 testBeanList = new ArrayList();

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 testBeanListFromJson = on(beanListToJson,

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 testList = new ArrayList();

("first");

("second");

String listToJson = (testList);

n(listToJson);

// prints ["first","second"]

// 将JSON字符串转换为 ArrayList

List testList2 = (List) on(listToJson,

new TypeToken>() {

}.getType());

n(testList2);

// 将HashMap字符串转换为 JSON

Map testMap = new HashMap();

("id", "");

("name", "");

String mapToJson = (testMap);

n(mapToJson);

// prints {"id":"","name":""}

// 将JSON字符串转换为 HashMap

Map userMap2 = (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 userMap = new HashMap();

("user1", user1);

("user2", user2);

List userList = new ArrayList();

(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 T json2bean(String json, Type type) {

Gson gson = new

GsonBuilder().registerTypeAdapter(,

new UtilDateDeserializer()).setDateFormat()

.create();

return on(json, type);

}

public static void main(String[] args) {

List testBeanList = new ArrayList();

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 testBeanListFromJson = json2bean(beanListToJson, type);

n(testBeanListFromJson);

// prints [TestBean@77a7f9[id=id,name=name,birthday=Mon Oct 26

12:39:05

// CST 2009]]

}

}

json是以字符串为基础实现的数据载体格式.所以从大局上来讲相对于xml有其自己的灵活性.所以使用gson可以很好的解决以对象为主题的传输问题,毕竟第一章即提到一切接

对象.但是这样做也散失了json的灵活性.所以开发的时候还是需要根据情况选择的.


本文标签: 字符串 转换 对象