Java的JSON格式转换库GSON的初步使用笔记
现在已经有一些能将Java对象转换成JSON的开源项目了。但是大多数项目都要求你在类文件中加入Java注解,而当你无法改动源代码的时候这是无法做到的。并且它们也不支持Java泛型。但是Gson却将这两点作为自己非常重要的设计目标。
特点:
- 使用toJson()和fromJson()方法,就可以非常容易的完成Java对象到JSON的相互转换。
- 能将预先存在的无法修改的对象与JSON互相转换。
- 支持Java泛型的使用。
- 允许对象的个性化表达形式(representation)。
- 支持各种复杂(拥有深继承层次结构和大量使用泛型类型)的对象。
Gson的应用主要为toJson与fromJson两个转换方法,而在使用这种对象转换之前需先创建好对象的类以及其成员才能成功的将JSON字符串成功转换成相对应的对象。
publicclassGsonUtil{
publicstaticGsongson;
/**Json转JavaBean**/
publicstaticfinalintJSON_JAVABEAN=0x10001;
/**Json转List<T>**/
publicstaticfinalintJSON_LIST=0x10002;
/**Json转Map<T>**/
publicstaticfinalintJSON_MAP=0x10004;
/**
*将对象转换成Json格式的字符串
*@paramobject要转换成Json的对象
*@returnString:Json格式的字符串
*/
publicstaticStringconvertObject2Json(Objectobject){
gson=newGson();
returngson.toJson(object);
}
/**
*将Json转换成Java对象
*@paraminputStream要转换成Java对象的inputStream
*@paramjavaBeanList获取Map中所包含的javaBean
*@paramconvertFlag转换类型标识
*@returnObject:Java对象
*/
publicstaticObjectconvertJson2Object(InputStreaminputStream,Class<?>javaBean,intconvertFlag){
gson=newGson();
Objectobject=null;
//Stringjson=inputStream2String(inputStream);
BufferedReaderreader=intputStream2BufferedReader(inputStream);
Typetype=getType(javaBean,convertFlag);
object=gson.fromJson(reader,type);
returnobject;
}
/**
*获取要转换成的对象类型
*@paramjavaBean
*@paramconvertFlag
*@return
*/
privatestaticTypegetType(Class<?>javaBean,intconvertFlag){
Typetype=null;
switch(convertFlag){
caseJSON_LIST:
if(javaBean.equals(News.class)){//Json转List泛型
type=newTypeToken<List<News>>(){}.getType();
}
break;
caseJSON_MAP:
if(javaBean.equals(News.class)){//Json转Map泛型
type=newTypeToken<Map<String,News>>(){}.getType();
}
break;
caseJSON_JAVABEAN://Json转JavaBean
type=javaBean;
break;
}
returntype;
}
/**
*将InputStream封装成BufferedReader
*@paraminputStream
*@return
*/
privatestaticBufferedReaderintputStream2BufferedReader(InputStreaminputStream){
returnnewBufferedReader(newInputStreamReader(inputStream));
}
}
代码分析:
在将Json转换成对象的时候,上面代码是从服务器端获取输入流,然后将输入流封装成BufferedReader对象,然后通过fromJson()方法将Json转换成Java对象。
Gson的fromJson()方法的第一个参数支持String、JsonElement和Reader类型的参数,可以根据需要进行选择。fromJson()方法的第二个参数支持Type和Class<?>类型的参数,当将Json转成JavaBean时可以使用Class<?>参数,也就是用对应JavaBean的JavaBean.calss作为第二个参数。当需要将Json转出成List泛型,Map泛型的时候需要采用TypeToken将第二个参数转换成Type类型(TypeToken是gson提供的数据类型转换器,可以支持各种数据集合类型转换)。