在Java中,經常使用JSON格式來進行數據傳輸與存儲。而在代碼實現過程中,可能會碰到需要將JSON數據轉為某個特定的Java泛型類型的情況。這時候,我們可以使用一些工具類來實現JSON轉泛型。
下面介紹兩種常用的JSON轉泛型方式:
方式一:使用Gson
import com.google.gson.Gson;
public class JsonUtil {
private static Gson gson = new Gson();
/**
* 將JSON字符串轉為指定類型的對象
* @param json JSON字符串
* @param clazz 指定泛型類型的Class對象
* @return 指定類型的對象
*/
public static <T> T parseJson(String json, Class<T> clazz) {
return gson.fromJson(json, clazz);
}
}
使用示例:
String json = "{ \"name\":\"John\", \"age\":30, \"car\":null }";
Person person = JsonUtil.parseJson(json, Person.class);
方式二:使用Jackson
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonUtil {
private static ObjectMapper mapper = new ObjectMapper();
/**
* 將JSON字符串轉為指定類型的對象
* @param json JSON字符串
* @param type 指定泛型類型的TypeReference對象
* @return 指定類型的對象
*/
public static <T> T parseJson(String json, TypeReference<T> type) {
try {
return mapper.readValue(json, type);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
使用示例:
String json = "[{\"name\":\"John\",\"age\":30},{\"name\":\"Mike\",\"age\":25}]";
List<Person> personList = JsonUtil.parseJson(json, new TypeReference<List<Person>>() {} );
需要注意的是,在使用Jackson轉泛型時,需要創建一個TypeReference對象,并在泛型參數中指定要轉換的具體類型,并重寫其方法體,否則會提示編譯錯誤。