Gson的使用
JSON 是一种文本形式的数据交换格式,它比XML更轻量、比二进制容易阅读和编写,调式也更加方便;解析和生成的方式很多,Java中最常用的类库有:JSON-Java、Gson、Jackson、FastJson等
1.在build.gradle中添加
implementation 'com.google.code.gson:gson:2.6.2'
同时可以添加Gson工具类
import android.text.TextUtils;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.json.JSONObject;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class GsonUtil {
public static Gson gson;
/*全局单例*/
private static Gson getInstance() {
if (gson == null) {
synchronized (GsonUtil.class) {
if (gson == null) {
gson = new GsonBuilder()
.setLenient()// json宽松
.enableComplexMapKeySerialization()//支持Map的key为复杂对象的形式
.serializeNulls() //智能null
.setPrettyPrinting()// 调教格式
.disableHtmlEscaping() //默认是GSON把HTML 转义的
.create();
}
}
}
return gson;
}
public static String toJson(Map<String,Object> params) {
return getInstance().toJson(params);
}
public static <T> String toJson(T cls) {
return getInstance().toJson(cls);
}
public static <T> T toClss(String json,Class<T> type){
try {
if(TextUtils.isEmpty(json)){
return null;
}
return getInstance().fromJson(json, type);
}
catch (Exception e){
e.printStackTrace();
return null;
}
}
public static Map<String,String> toMap(String json){
try {
Map<String,String> map = new HashMap<>();
JSONObject jsonObject = new JSONObject(json);
Iterator<String> keys = jsonObject.keys();
while (keys.hasNext()){
String key = keys.next();
String value = jsonObject.getString(key);
map.put(key,value);
}
return map;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
public static <T> List<T> toList(String json, Class<T> tClass){
if(TextUtils.isEmpty(json) || json == "null"){
return new ArrayList<T>();
}
return getInstance().fromJson(json, new ParameterizedTypeImpl(tClass));
}
private static class ParameterizedTypeImpl implements ParameterizedType{
Class aClass;
ParameterizedTypeImpl(Class clz){
this.aClass = clz;
}
@Override
public Type[] getActualTypeArguments() {
return new Type []{this.aClass};
}
@Override
public Type getRawType() {
return List.class;
}
@Override
public Type getOwnerType() {
return null;
}
}
}