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來轉換對象