Gson是一个可以将json字符串转化为jsonObject、class对象的类库。可以作用于任意的Java对象,包括完整的泛型支持。
1、搭建Android工程demo
引进Gson包
Android studio新建工程,在app下面的build.gradle中添加:
compile 'com.google.code.gson:gson:2.7'
2、读取本地Json文件
5、源码说明:
使用接触最多的就是Gson和GsonBuilder类。
其中,GsonBuilder就是Gson的builder类,采用建造者模式方式,来简化Gson构造方法需要的参数。
Gson构造方法如下:
GsonBuilder类内容进行说明:
private Excluder excluder = Excluder.DEFAULT;
用于配置一些不希望被转换成JSON格式的对象的成员变量
private LongSerializationPolicy longSerializationPolicy = LongSerializationPolicy.DEFAULT;
private FieldNamingStrategy fieldNamingPolicy = FieldNamingPolicy.IDENTITY;
private final Map<Type, InstanceCreator<?>> instanceCreators
= new HashMap<Type, InstanceCreator<?>>();
private final List<TypeAdapterFactory> factories = new ArrayList<TypeAdapterFactory>();
Gson类说明:
是最常使用的对象,包括:
public <T> T fromJson(String json, Class<T> classOfT) throws JsonSyntaxException
public static <T> T jsonStringToClass(String jsonString, Class<T> tClass
public String toJson(Object src)
构造函数中就是将参数列表中的对象配置为成员变量TypeAdapterFactory的操作如下:
List<TypeAdapterFactory> factories = new ArrayList<TypeAdapterFactory>();
// built-in type adapters that cannot be overridden
factories.add(TypeAdapters.JSON_ELEMENT_FACTORY);
factories.add(ObjectTypeAdapter.FACTORY);
// the excluder must precede all adapters that handle user-defined types
factories.add(excluder);
// user's type adapters
factories.addAll(typeAdapterFactories);
// type adapters for basic platform types
factories.add(TypeAdapters.STRING_FACTORY);
factories.add(TypeAdapters.INTEGER_FACTORY);
factories.add(TypeAdapters.BOOLEAN_FACTORY);
factories.add(TypeAdapters.BYTE_FACTORY);
factories.add(TypeAdapters.SHORT_FACTORY);
TypeAdapter<Number> longAdapter = longAdapter(longSerializationPolicy);
factories.add(TypeAdapters.newFactory(long.class, Long.class, longAdapter));
factories.add(TypeAdapters.newFactory(double.class, Double.class,
doubleAdapter(serializeSpecialFloatingPointValues)));
factories.add(TypeAdapters.newFactory(float.class, Float.class,
floatAdapter(serializeSpecialFloatingPointValues)));
此处,factories预先记载了很多基本类型转换组件的Factory,factories.addAll(typeAdapterFactories)
是添加构造函数中传入的用户自定义的TypeAdapterFactory
TypeAdapters
抽象类,提供了两个抽象函数作为hook函数来让用户重载
TypeAdapterFactory
是一个接口
<T> TypeAdapter<T> create(Gson gson, TypeToken<T> type);
TypeAdapters
定义了几乎所有的基础类型的TypeAdapter和Factory
fromJson()
TypeToken<T> typeToken = (TypeToken<T>) TypeToken.get(typeOfT);//获得要转换类型对应的TypeToken对象
TypeAdapter<T> typeAdapter = getAdapter(typeToken);//通过type来获得Adapter
T object = typeAdapter.read(reader);//通过typeAdapter来转换对象