安卓

android 模型与json数据的相互转化

2018-01-25  本文已影响466人  风___________

如果喜欢copy直接看最下面的封装

第一式: 模型 '转' json字符串
第二式: json字符串  '转' 模型
第三式: List<模型> '转' json字符串
第四式: json字符串 '转'  List<模型>

一:工具

    /**
     * model json转换的库
     * */
    compile 'com.google.code.gson:gson:2.8.0'

基础使用

  1. 对象的解析与转化json
Gson gson = new Gson();
// 对象 -->json
String jsonString = gson.toJson(user); 
// json -->对象
User user = gson.fromJson(jsonString, User.class);
  1. 属性重命名(当后台返回的json 名称与前台属性名不一致时)
    @SerializedName("key")
    private String keyString;

    @SerializedName("amount")
    private String amount;
  1. 当有模型或者模型数组嵌套的时候
// model 模型如下:
public class KapModelContentBill extends KapModelBase {
    @SerializedName("id")
    private int ID;

    @SerializedName("buyer")
    private KapModelUser buyer;// 嵌套model

    @SerializedName("count")
    private int count;

    @SerializedName("totalAmount")
    private int totalAmont;

    @SerializedName("time")
    private long time;

    @SerializedName("bills")
    private List<KapModelBill> bills; // 嵌套modelList
}
  1. 数组json --> List<model>
// 针对上述模型 json -> model  有如下操作:
Gson gson = new Gson();
// 错误的操作
List<UserModel> userList = gson.fromJson(jsonArray, List<UserModel>.class)
// 正确的操作
List<UserModel> userList = gson.fromJson(jsonArray, new TypeToken<List<UserModel>>() {}.getType());
// 原因:范型擦除
对于Java来说List<String> 和List<User> 这俩个的字节码文件只一个那就是List.class

二:自己封装一个工具类

  1. 工具类使用:
UserModel *userModel = new UserModel();
// model ----> json
String jsonString = KapGsonManager.KapModelToJson(userModel);
// json   ------> model
UserModel *userModel = KapGsonManager.KapJsonToModel(jsonString,UserModel.class);
// models ------> json
List<UserModel> userList = new List<UserModel>(){{
           add(userModel);
       }};
String jsonArrayString = KapGsonManager.KapModelsToJson(userList);
// json ------->models
List<UserModel> modelList = KapGsonManager.KapJsonToModels(modelString,UserModel.class);         
  1. 工具类代码如下
import com.google.gson.Gson;

import java.lang.reflect.Type;
import java.util.List;

import ikidou.reflect.TypeBuilder;
/**
 * Created by jing on 17/5/22.
 * gson的管理类
 */
public class KapGsonManager {
    private KapGsonManager(){}
    private static KapGsonManager shareGsonManager = new KapGsonManager();
    private Gson gson = new Gson();

    // model
    public static String KapModelToJson(Object o){
        if (o == null) return "";
        return shareGsonManager.gson.toJson(o);
    }
    public static <T> T KapJsonToModel(String jsonString,Class<T> modelClass){
        if (jsonString == null) return null;
        return shareGsonManager.gson.fromJson(jsonString,modelClass);
    }

    // modelList
    public static String KapModelsToJson(List modelList){
        if (modelList == null) return "";
        return shareGsonManager.gson.toJson(modelList);
    }
    // http://www.jianshu.com/p/d62c2be60617 泛型分析链接
    public static <T> List<T> KapJsonToModels(String jsonString, Class<T> modelClass){
        Type listType = TypeBuilder
                .newInstance(List.class)
                .addTypeParam(modelClass)
                .build();
        List<T> modelList = shareGsonManager.gson.fromJson(jsonString,listType);
        return modelList;
    }
}

参考学习自-----你真的会用Gson吗?Gson使用指南~~~~写的贼好

上一篇下一篇

猜你喜欢

热点阅读