Gson的使用

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;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值